lam*_*bad 2 java spring servlets servlet-filters spring-boot
我有一个可以写入 JSON 内容的函数@GetMapping(value = "/getToken")。
@GetMapping(value = "/getToken")
public String getToken(HttpServletRequest request, HttpServletResponse response, Model model) {
// jsonObject
PrintWriter out = response.getWriter();
out.print(jsonObject);
}
Run Code Online (Sandbox Code Playgroud)
现在,用户可以GET使用如下 URL 向上述映射发出请求:
localhost:8080/getToken?username="username"&password="password"
我还创建了一个名为CORSFilterImplements 的类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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在浏览器中点击localhost:8080或localhost:8080/thankyou时,就会调用上面的过滤器。
我怎样才能阻止这个?
我只想在 URL 路径为时调用上面的过滤器
localhost:8080/getToken?username="user"&password="pass"
不幸的是,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();
}
Run Code Online (Sandbox Code Playgroud)
但请注意,Spring Boot对 CORS 具有本机支持。你不需要任何过滤器。
| 归档时间: |
|
| 查看次数: |
4574 次 |
| 最近记录: |