目录
Spring Boot监听器、过滤器、拦截器
Spring Boot监听器、过滤器、拦截器
启动类中增加注解
在SpringBootApplication启动类上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码
@WebFilter过滤器参数:
参数 | 描述 |
---|---|
filterName | 过滤器名字 |
urlPatterns | 过滤器的范围,拦截规则,支持正则 |
initParams | 过滤器初始化参数 |
监听器
监听器也叫Listener,是Servlet的监听器,可以用于监听Web应用中某些对象;信息的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的响应处理。当范围对象的状态发生变化时,服务器自动调用监听器对象中的方法,常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等
监听器:listener是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件。监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理
1.统计在线人数和在线用户
2.系统启动时加载初始化信息
3.统计网站访问量
4.记录用户访问路径
1.创建监听器(实现HttpSessionListener接口)
2.实现WebMvcConfigurer接口,在listenerRegist()添加监听器
@Bean
public ServletListenerRegistrationBean listenerRegist() {
ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean();
srb.setListener(new MyHttpSessionListener());
System.out.println("listener");
return srb;
}
过滤器
过滤器:Filter是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。
例如:实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理
1.实现Filter接口创建过滤器
2.实现WebMvcConfigurer接口,在filterRegist()添加过滤器
@Bean
public FilterRegistrationBean filterRegist() {
FilterRegistrationBean frBean = new FilterRegistrationBean();
frBean.setFilter(new MyFilter());
frBean.addUrlPatterns("/*");
System.out.println("filter");
return frBean;
}
拦截器
拦截器:Interceptor 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作
比如日志、安全等。一般拦截器方法都是通过动态代理的方式实现。可以通过它来进行权限验证,或者判断用户是否登陆,或者是像12306判断当前时间是否是购票时间
1.实现拦截器接口(HandlerInterceptor)
或者继承HandlerInterceptorAdapter创建一个拦截器
public class Interceptor implements HandlerInterceptor {
}
2.实现WebMvcConfigurer接口,在addInterceptors()中添加拦截器
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private Interceptor handlerInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(handlerInterceptor);
}
}