代码之家  ›  专栏  ›  技术社区  ›  TOUZENE Mohamed Wassim

Spring:我怎么知道查询来自哪里?使用@RequestHeader(value=“用户代理”)

  •  2
  • TOUZENE Mohamed Wassim  · 技术社区  · 7 年前

    使用Spring,我想知道 @Controller 请求是否来自浏览器。如果是这样,那么就进行特殊处理。我想过使用 @RequestHeader (value = "User-Agent") 这样地:

        @RequestMapping(value = "/user-agent-test")
            public String hello(@RequestHeader(value="User-Agent") String userAgent)
                 //toDo                  
                 if(browser){
                   //Make something 
                 }else{
                   // Make something else
                 }
              return "home";
            }
    

    提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Alejandro Alanis    7 年前

    你真的可以 保证http头“用户代理”的存在确保了这一点 来自浏览器。这也可以是设置它的任何其他脚本/库/程序。相反,缺少标题并不是它的标志 浏览器。你只是在做一个“有根据的猜测”。

    无论如何,如果您仍然希望遵循您的方法,那么还应该在RequestHeader注释上使用“required=false”,因此当未设置标头时,参数为null,而不是完全失败。然后检查参数是否为null。

    这样地:

    @RequestMapping(value = "/user-agent-test")
    public String hello(@RequestHeader(value="User-Agent", required=false) String userAgent)
       if (null != userAgent) {
          // could be a browser
       } else {
          // could be something else
       }
       return "home";
    

    看见 springs javadoc 在注释上。 也可以看到这个 answer 关于“用户代理”标头的存在