我有一个函数 @GetMapping(value =" / getToken"),用于编写json内容。
@GetMapping(value = "/getToken")
public String getToken(HttpServletRequest request, HttpServletResponse response, Model model) {
// jsonObject
PrintWriter out = response.getWriter();
out.print(jsonObject);
}
现在,用户可以使用以下网址对上面的映射进行GET请求:
本地主机:8080 /用户名为gettoken ="用户名"&安培;密码="密码"
我还创建了一个名为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:8080或localhost:8080 / thankyou时,上面的过滤器就会被调用。
我该如何制止?我只想在url路径为localhost时调用上面的过滤器:8080 / getToken?username =" user"& password =" pass"
答案 0 :(得分:2)
您可以使用拦截器 - HandlerInterceptor
。请参阅以下网址,了解操作方法。
答案 1 :(得分:2)
不幸的是,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。你不需要任何过滤器。
答案 2 :(得分:0)
如果它是基于纯jsp的应用程序,那么你需要在web.xml中声明它,因为 @WebFilter 不保证过滤器的执行顺序或者如果它是基于spring的应用程序那么你可以在方法级别使用 @CrossOrigin 或声明一个bean来过滤下面url中提到的每个url