SpringBoot2.x過濾器Filter和使用Servlet3.0配置自定義Filter實戰


補充:SpringBoot啟動日志

1、深入SpringBoot2.x過濾器Filter和使用Servlet3.0配置自定義Filter實戰(核心知識)
  簡介:講解SpringBoot里面Filter講解和使用Servlet3.0配置自定義Filter實戰

  filter簡單理解:人--->檢票員(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優先級一樣,不然會沖突

    注冊Filter的bean FilterRegistrationBean
    同模塊里面有相關默認Filter
    web->servlet->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、官網地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

   代碼示例:

  啟動類中加入@ServletComponentScan注解

  

  LoginFilter.java:

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

  controller:

瀏覽器輸入:http://localhost:8083/api/v1/account?username=xdclass

前台顯示:

控制台顯示:

輸入錯誤的username情況:

瀏覽器輸入:http://localhost:8083/api/v1/account?username=xdclasss

跳轉到index.html(可用於提示用戶進行登錄操作)

 


免責聲明!

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



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