[英]@WebFilter(urlPatterns) not mapping http request properly
我有一個帶有@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”時才調用上述過濾器
不幸的是,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();
}
如果它是基於純jsp的應用程序,則需要在web.xml中聲明它,因為@WebFilter不保證過濾器的執行順序,或者如果它是基於spring的應用程序,則可以在方法級別使用@CrossOrigin或聲明一個bean過濾每個網址,如以下網址中所述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.