SpringBoot中如何编写Filter过滤器呢?

戚薇 SpringBoot 发布时间:2023-06-22 22:10:42 阅读数:3848 1
下文笔者讲述SpringBoot编写filter过滤器的方法简介说明
学习完本篇文章后,你将掌握SpringBoot中编写Filter过滤器的方法,如下所示

filter过滤器简介

过滤器Filter
   在controller处理逻辑之前和之后加入一些其他逻辑
     可以在controller之前进行验证和信息处理
      或在controller之后进行统计记录
     过滤器可以设置过滤路径
     多个过滤器也可以指定过滤顺序

filter过滤器实现思路

1.SpringBoot中编写过滤器
    必须实现javax.servlet.Filter这个接口
2.实现接口中的三个方法
  init:
     过滤器初始化操作
     springboot启动的时候调用;
  doFilter:
     过滤处理逻辑;
   destroy:
     过滤器销毁操作
     项目结束停止的时候调用;  
注意事项:
   doFilter方法里有个FilterChain参数
    在过滤逻辑里
	  需要手动调用chain.doFilter(request, response)
	   才会往下处理其他过滤器和controller

3.配置过滤器的方法
   将filter交给SpringBoot管理(使用@Component注解标注)
   即可实现filter过滤器的添加
启动类
package testspringboot.test8filter;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
  
@SpringBootApplication
public class Test8Main {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(Test8Main.class, args);
	}
 
}

controller类:

 
package testspringboot.test8filter;
 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/filter")
public class MyController {
 
	@RequestMapping("/test")
	public String test1(String a) {
		System.out.println("_Controller_test1:" + a);
		return "test1";
	}
	
	@RequestMapping("/test/a")
	public String test2(String a) {
		System.out.println("_Controller_test2:" + a);
		return "test2";
	}
	
	@RequestMapping("/test/b")
	public String test3(String a) {
		System.out.println("_Controller_test3:" + a);
		return "test3";
	}
	
}
测试的Filter类:

package testspringboot.test8filter;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Component;
 
@Component
public class MyFilter1 implements Filter {
 
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("MyFilter1 init:" + filterConfig.getFilterName());
	}
	
	@Override
	public void destroy() {
		System.out.println("MyFilter1 destroy");
	}
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("过滤所有Controller之前");
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		System.out.println("RequestURL=" + httpRequest.getRequestURL());
		chain.doFilter(request, response);
		System.out.println("过滤所有Controller之后");
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202306/6863.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者