【问题标题】:@WebFilter(urlPatterns) not mapping http request properly@WebFilter(urlPatterns) 未正确映射 http 请求
【发布时间】:2018-09-12 08:23:11
【问题描述】:

我有一个带有 @GetMapping(value = "/getToken") 的函数,它写入 json 内容。

@GetMapping(value = "/getToken")
    public String getToken(HttpServletRequest request, HttpServletResponse response, Model model) {
             // jsonObject
              PrintWriter out = response.getWriter();
                out.print(jsonObject);
}

现在,用户可以使用这样的 url 向上述映射发出 GET 请求:

localhost:8080/getToken?username="username"&password="password"

我还创建了一个名为 CORSFilter 的类,它实现了 javax.servlet.Filter,我希望这个过滤器只拦截那些在请求路径中有 /getToken 的请求。

@WebFilter(urlPatterns = "/getToken")
    public class CORSFilter implements Filter {
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      //validate user and password
            chain.doFilter(requestToUse, responseToUse);
    
    }
}

现在,当我在浏览器中点击localhost:8080localhost:8080/thankyou 时,就会调用上述过滤器。

我怎样才能阻止这种情况?仅当 url 路径为 localhost:8080/getToken?username="user"&password="pass"

时,我才想调用上面的过滤器

【问题讨论】:

    标签: java spring spring-boot servlets servlet-filters


    【解决方案1】:

    不幸的是,Spring Boot 不支持使用 WebFilter 声明的过滤器的 urlPatterns。如果需要应用模式,则必须将过滤器声明为 bean,并在配置类中为该 bean 声明过滤器注册。例如:

    @Bean
    public FilterRegistrationBean<CORSFilter> corsFilterRegistration() {
        FilterRegistrationBean<CORSFilter> filterRegistrationBean =
            new FilterRegistrationBean<>(corsFilter());
        filterRegistrationBean.setUrlPatterns(Collections.singleton("/getToken"));
        return filterRegistrationBean;
    }
    
    @Bean
    public CORSFilter corsFilter() {
        return new CORSFilter();
    }
    

    但是请注意,Spring Boot 有 native support for CORS。你不需要任何过滤器。

    【讨论】:

    • 它是否也适用于非 Spring Boot 应用程序?
    【解决方案2】:
    【解决方案3】:

    如果是纯jsp应用那么你需要在web.xml中声明它因为@WebFilter不保证过滤器的执行顺序或者如果它是基于spring的应用那么你可以在方法级别使用 @CrossOrigin 或声明一个 bean 来过滤每个 url,如下面的 url 中提到的

    Spring CORS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2012-10-12
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2016-05-23
      相关资源
      最近更新 更多