SpringBoot中如何编写Filter过滤器呢?
下文笔者讲述SpringBoot编写filter过滤器的方法简介说明
学习完本篇文章后,你将掌握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之后");
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


