SpringBoot學習筆記:自定義的過濾器


SpringBoot學習筆記:自定義的過濾器

快速開始

  SpringBoot提供的前端控制器無法滿足我們產品的需求時,我們需要添加自定義的過濾器。

  在SpringBoot的開發中,我們應該還聽說過攔截器,他們的效果是一樣的,都是對請求和響應進行過濾,但還是有一點區別:

  • 過濾器是Servlet概念中定義的,需要收到容器的支持,如Tomcat;攔截器是Spring定義的,有Spring框架支持。
  • Filter只能用於Web開發,攔截器既可以用在Web開發,也可以用在App、Swing開發中。
  • 攔截器更加靈活,在Spring環境中更適合使用攔截器。

  所以,本片文章僅僅是講解過濾器的使用,SpringBoot開發中建議使用攔截器,請看https://www.cnblogs.com/MrSaver/p/11201867.html

編寫過濾器

package com.mrsaber.security;

import org.springframework.core.annotation.Order;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@Order(1)
@WebFilter(filterName = "MSecurity",urlPatterns = {"*.html"})
public class MSecurityFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
        System.out.println(request.getRequestURI());
        //檢查是否是登錄頁面
        if(request.getRequestURI().equals("/web/index.html"))
            filterChain.doFilter(servletRequest,servletResponse);

        //檢測用戶是否登錄
        HttpSession session =request.getSession();
        String status= (String) session.getAttribute("isLogin");
        if(status==null || !status.equals("true"))
        {
            try{  response.sendRedirect("/web/index.html");}catch (Exception e){}
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

說明:

  這里使用了注解@ WebFilter來表明這是一個過濾器,這是Servlet 3.0引入的新注解,同樣還有@WebFilter 和 @WebListener,這就類似於我們傳統的WebServlet開發了

注冊過濾器

  使用嵌入式容器時,可以使用@ServletComponentScan啟用@WebServlet,@ WebFilter和@WebListener注釋類的自動注冊。

@SpringBootApplication
@ServletComponentScan(basePackages = "com.mrsaber.security")
public class MsSupplyAndSaleApplication {
    public static void main(String[] args) {
        SpringApplication.run(MsSupplyAndSaleApplication.class, args);
    }

}

 


免責聲明!

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



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