springboot配置過濾器filter-註解式@WebFilter, @Order, @ServletComponentScan
阿新 • • 發佈:2018-12-09
好多文件說的情況都不一樣, 針對自己遇到的情況做了總結, 有遇到相似的, 大家可以借鑑一下, 如果不適用你的專案, 可以發出來, 大家一起交流!
1. 首先自定義過濾器類需要實現Filter介面; 添加註解@WebFilter; 其中urlPatterns可以配置過濾的請求路徑,以及filterName過濾器名稱
package com.example.demo.controller.filter; import org.springframework.core.annotation.Order; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * @author zwy * @date 2018/9/13 */ //@Order規定多個Filter的執行順序,按照從小到大執行()中的值 @Order(1) //@WebFilter過濾對應的請求路徑 @WebFilter(urlPatterns = {"/joker/user/*"},filterName = "loginFilter") public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("我可以過濾/joker/user/的請求"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }
2. springboot啟動入口**application.java中增加@ServletComponentScan註解,
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * @author zwy */ //加了@ServletComponentScan,無論過濾器類加不加@Componment都可以,單使用@Component會預設過濾/*, @ServletComponentScan @SpringBootApplication public class DemoUserApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DemoUserApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoUserApplication.class); } }
啟動你就會發現已經成功了:
如果想配置多個過濾器, 怎麼控制過濾的先後順序,這時就需要在自定義過濾器類上面增加註解@Order(1):
裡面的值可以設定任意值, 但是執行的順序按照此值從小到大執行!
注意:
有的人會遇到新增@Component, 本人親測, 如果入口不新增@ServletComponentScan註解, 過濾器新增@Component也可以起作用, 不過你配置的urlPatterns將會失效, 預設會過濾/*, 這時不妨入口新增@ServletComponentScan註解, 這時你會發現會過濾你配置的路徑, 而且無論你加不加@Component都不影響!