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之后"); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。