SpringBoot中的filter


在 Spring Boot 中使用 Filter 與前面的使用 Servlet 相似,根據 Filter 注冊方式的不同,有兩種使用方式。若使用的是 Servlet3.0+版本,則兩種方式均可使用;若使用的是 Servlet2.5版本,則只能使用配置類方式。

1.注解方式

若使用的是 Servlet3.0+版本,可以直接使用 Filter 的注解對 Filter 進行注冊。其總步驟有
兩步:

  • 在定義好的 Filter 上使用@WebFilter 注解
  • 在入口類上添加@ServletComponentScan 注解 --->需要寫掃描的包

1.1創建springboot

1.2創建filter

自定義filter實現Filter接口

package com.example.demo.filter;

import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Created by niugang on 2019/7/20/15:46
 */
@WebFilter("/*")
@Slf4j
public class AccesLogFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("AccesLogFilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requesturi = request.getRequestURI();

        log.info("Request URI:{}",requesturi);
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        log.info("AccesLogFilter destroy");
    }
}

1.3修改springboot啟動入口

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages="com.example.demo.filter")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

2.配置方式

若使用的是 Servlet2.5 版本,沒有 Filter 注解,此時只能使用配置類方式。其總步驟有
兩步,與@ServletComponentScan 注解無關。

  • 定義 Filter
  • 定義配置類

2.1創建工程

2.2創建filter

package com.example.demo.filter;

import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Created by niugang on 2019/7/20/15:46
 */
@Slf4j
public class AccesLogFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("AccesLogFilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requesturi = request.getRequestURI();

        log.info("Request URI:{}",requesturi);
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        log.info("AccesLogFilter destroy");
    }
}

2.3修改配置類

package com.example.demo;

import com.example.demo.filter.AccesLogFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public FilterRegistrationBean<AccesLogFilter> registration() {
        //創建filter
        AccesLogFilter accesLogFilter = new AccesLogFilter();
        //注冊過濾器
        FilterRegistrationBean<AccesLogFilter> registration = new FilterRegistrationBean<>(accesLogFilter);
        //添加條件
        registration.addUrlPatterns("/*");
        return registration;
    }

}

微信公眾號
在這里插入圖片描述


免責聲明!

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



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