SpringBoot学习-(十一)SpringBoot过滤器
2017-09-26 09:41
477 查看
两种加入spring ioc容器的方法
在过滤器上面添加@Component注解在springboot启动类上面添加@ServletComponentScan注解(Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码)
1.目录结构
2.编写过滤器
package com.ahut.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import org.springframework.stereotype.Component; /** * * @ClassName: MyFilter * @Description:自定义过滤器 * @author cheng * @date 2017年9月26日 上午9:19:38 */ // 加入spring ioc容器 @Component /* * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */ @WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter implements Filter { /** * 执行过滤操作 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); System.out.println("执行过滤操作。。。"); } /** * 过滤器初始化 */ @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化。。。"); } /** * 过滤器销毁 */ @Override public void destroy() { System.out.println("过滤器销毁。。。"); } }
注意:过滤器在服务器启动时初始化,服务器关闭时销毁!!!
3.多个过滤器执行的顺序问题
目录结构:过滤器代码:
package com.ahut.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * * @ClassName: MyFilter * @Description:自定义过滤器 * @author cheng * @date 2017年9月26日 上午9:19:38 */ // 加入spring ioc容器 @Component /* * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */ @WebFilter(filterName = "myFilter", urlPatterns = "/*") //指定过滤器的执行顺序,值越小越靠后执行 @Order(1) public class MyFilter implements Filter { /** * 执行过滤操作 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); System.out.println("执行过滤操作。。。111"); } /** * 过滤器初始化 */ @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化。。。111"); } /** * 过滤器销毁 */ @Override public void destroy() { System.out.println("过滤器销毁。。。111"); } }
package com.ahut.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * * @ClassName: MyFilter2 * @Description:自定义过滤器 * @author cheng * @date 2017年9月26日 上午9:19:38 */ // 加入spring ioc容器 @Component /* * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */ @WebFilter(filterName = "myFilter2", urlPatterns = "/*") //指定过滤器的执行顺序,值越大越先执行 @Order(2) public class MyFilter2 implements Filter { /** * 执行过滤操作 */ @Override public void doFilter(Servl ce5d etRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); System.out.println("执行过滤操作。。。222"); } /** * 过滤器初始化 */ @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化。。。222"); } /** * 过滤器销毁 */ @Override public void destroy() { System.out.println("过滤器销毁。。。222"); } }
执行结果:
过滤器初始化。。。222 过滤器初始化。。。111 执行过滤操作。。。222 执行过滤操作。。。111 过滤器销毁。。。222 过滤器销毁。。。111
结论:
通过@Order(i)注解可以控制过滤器的执行顺序
i的值越小,过滤器越靠后执行
i的值越大,过滤器越先执行
相关文章推荐
- SpringBoot学习之路:09.Spring Boot中添加Filter应用
- 【系统学习SpringBoot】SpringBoot新建HelloWorld工程(IDEA)
- springboot学习之---初识springboot
- springboot学习(3)springboot使用jsp完成数据的页面展示
- springBoot学习(一): 第一个springBoot项目
- SpringBoot学习笔记(4):添加自定义的过滤器
- SpringBoot学习(六)--SpringBoot集成swagger在线API文档工具
- SpringBoot学习之——springboot的各种配置
- springboot学习(4)springboot使用thymeleaf完成数据的页面展示
- springboot(十一):Spring boot中mongodb的使用
- SpringBoot学习-(二十三)SpringBoot发送邮件
- SpringBoot学习:Hibernate,Mybatis分别与Springboot的整合
- SpringBoot学习笔记(四) SpringBoot Web相关的自动配置
- 【SpringBoot学习笔记】SpringBoot_02_vue和SpringBoot的跨域请求
- 【系统学习SpringBoot】SpringBoot初遇Spring-Data-JPA
- SpringBoot学习之spring-boot:run启动时,指定spring.profiles.active
- SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置
- SpringBoot(十一):Spring boot 中 mongodb 的使用
- springboot(十一):Spring boot中mongodb的使用
- SpringBoot的Thymeleaf支持,结合SpringMVC做的案例(学习SpringBoot实战)