SpringBoot(8) SpringBoot過濾器Filter


1、SpringBoot啟動默認加載的Filter
  characterEncodingFilter

  hiddenHttpMethodFilter

  httpPutFormContentFilter

  requestContextFilter

2、Filter優先級(Ordered.HIGHEST_PRECEDENCE  Ordered.LOWEST_PRECEDENCE)

低位值意味着更高的優先級 Higher values are interpreted as lower priority

自定義Filter,避免和默認的Filter優先級一樣,不然會沖突

 

3、自定義Filter
1)使用Servlet3.0的注解進行配置

2)啟動類里面增加 @ServletComponentScan,進行掃描

3)新建一個Filter類,implements Filter,並實現對應的接口

4) @WebFilter 標記一個類為filter,被spring進行掃描,urlPatterns:攔截規則,支持正則

5)控制chain.doFilter的方法的調用,來實現是否通過放行 不放行,web應用resp.sendRedirect("/index.html");

場景:權限控制、用戶登錄(非前端后端分離場景)等

 1 @WebFilter(urlPatterns = "/api/*", filterName = "loginFilter")
 2 public class LoginFilter  implements Filter{
 3     
 4     
 5     
 6      /**
 7       * 容器加載的時候調用
 8       */
 9       @Override
10       public void init(FilterConfig filterConfig) throws ServletException {
11           System.out.println("init loginFilter");
12       }
13 
14       
15       /**
16        * 請求被攔截的時候進行調用
17        */
18       @Override
19       public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
20           System.out.println("doFilter loginFilter");
21           
22           HttpServletRequest req = (HttpServletRequest) servletRequest;
23           HttpServletResponse resp = (HttpServletResponse) servletResponse;
24           String username = req.getParameter("username");
25           
26           if ("admin".equals(username)) {
27               filterChain.doFilter(servletRequest,servletResponse);
28           } else {
29               resp.sendRedirect("/index.html");
30               return;
31           }
32 
33       }
34 
35       /**
36        * 容器被銷毀的時候被調用
37        */
38       @Override
39       public void destroy() {
40           System.out.println("destroy loginFilter");
41       }
42 
43 }

啟動日志里,已經啟動默認加載的Filter和自定義的Filter

官網地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM