简单了解SpringBoot过滤器及使用方式
2020-05-09 04:06
211 查看
过滤器简介
- 过滤器依赖Servlet容器,属于Servlet规范的一部分。
- 在实现上基于Servlet容器的函数回调,可以对几乎所有请求进行过滤。
- Filter的生命周期由Servlet容器管理。
过滤器执行流程
过滤器配置使用方式一
@Order(1) // 指定过滤器的执行顺序 @WebFilter(filterName = "CostTimeFilter", urlPatterns = "/*" , initParams = { @WebInitParam(name = "URL", value = "http://localhost:8080")})public class CostTimeFilter implements Filter { private String url; /** * filter对象只会创建一次,init方法也只会执行一次。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { this.url = filterConfig.getInitParameter("URL"); System.out.println("Filter init..."); } /** * 主要的业务代码编写方法 */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { long start = System.currentTimeMillis(); System.out.println(start + " Filter doFilter before..."); filterChain.doFilter(servletRequest, servletResponse); long end = System.currentTimeMillis(); System.out.println(end + "Filter doFilter after..."); } /** * 在销毁Filter时自动调用。 */ @Override public void destroy() { System.out.println("Filter destroy..."); } }
@RestController public class IndexContoller { @RequestMapping("/query") public void query() throws Exception { System.out.println("IndexContoller query..."); } }
@SpringBootApplication @ServletComponentScan // 扫描 Servlet 相关的组件 public class SpringBootFilterApplication { public static void main(String[] args) { SpringApplication.run(SpringBootFilterApplication.class, args); } }
过滤器配置方式二
public class CostTimeFilter implements Filter { private String url; /** * filter对象只会创建一次,init方法也只会执行一次。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { this.url = filterConfig.getInitParameter("URL"); System.out.println("Filter init..."); } /** * 主要的业务代码编写方法 */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { long start = System.currentTimeMillis(); System.out.println(start + " Filter doFilter before..."); filterChain.doFilter(servletRequest, servletResponse); long end = System.currentTimeMillis(); System.out.println(end + "Filter doFilter after..."); } /** * 在销毁Filter时自动调用。 */ @Override public void destroy() { System.out.println("Filter destroy..."); } }
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean registFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new CostTimeFilter()); registration.addUrlPatterns("/*"); registration.setName("CostTimeFilter"); registration.setOrder(1); return registration; } }
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- C#使用命令行方式实现Ping简单功能
- 学习NUnit测试1(简单的Nunit使用,用于了解Nunit)
- 微信企业号简单的OAuth2验证接口实例(使用SpringMVC非注解方式)
- Spring集成JSF的最简单方式是使用DelegatingVariableResolver类
- 使用frame方式实现的简单注册框
- 5个简单方式使用strace场景
- 多线程NSThread的简单创建和使用——创建线程的几种方式
- 了解POP3协议,使用简单的代码监控pop3邮箱,或者不用代码,直接使用telnet
- iPhone开发之创建简单界面视图的三种方式之二 使用Xcode4完全手动构建界面
- 使用Flexbox布局方式的简单演示
- java使用soap方式简单实现webservice
- 外观模式-facade实现interface的方式(简单工厂+facade组合使用)
- 使用servletAPI三种方式简单示例
- 简单了解PHP编程中数组的指针的使用
- 简单了解Linux系统中clock命令的使用方法
- C#使用命令行方式实现Ping简单功能 http://www.cnblogs.com/kevinton/archive/2007/06/28/798581.html
- winsock简单使用(采用select轮询方式,从客户端获取数据)
- hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程
- Jersey使用总结一(jersey初步使用和简单post请求几种参数传递,String方式,不含对象操作)
- 使用Flexbox布局方式的简单演示