簡體   English   中英

@WebFilter(urlPatterns)無法正確映射http請求

[英]@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();
}

但是請注意,Spring Boot 對CORS具有本機支持 您不需要任何過濾器。

如果它是基於純jsp的應用程序,則需要在web.xml中聲明它,因為@WebFilter不保證過濾器的執行順序,或者如果它是基於spring的應用程序,則可以在方法級別使用@CrossOrigin或聲明一個bean過濾每個網址,如以下網址中所述

春季CORS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM