当前位置:网站首页>拦截器和过滤器
拦截器和过滤器
2022-07-24 18:58:00 【为什么不好好卖蛋饼】
拦截器和过滤器
对比
1 过滤器只能在容器初始化被调用一次,而action周期中,拦截器可以被多次调用。
2 过滤器对所有请求起作用,拦截器只能对action起作用。
3 过滤器不能访问上下文,堆栈的对象。
4 过滤器依赖于servlet容器
5 过滤器基于函数回调,拦截器基于java反射。
6 过滤器不能获取ioc容器的bean,拦截器可以,拦截注入service,可以调用业务逻辑。
执行顺序
filter–interceptor.preHandle–handler–interceptor.postHandle–interceptor.afterCompletion–filter
拦截器
@Component
public class SampleInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("\n已经进入拦截器");
return true;
//return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("控制器执行完毕");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("得到结果"+response);
System.out.println("请求完毕\n");
}
}
配置类
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
SampleInterceptor sampleInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sampleInterceptor).addPathPatterns("*/**").excludePathPatterns("/**/LoginController/**","/**/error")
.excludePathPatterns("/error");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
拦截器场景
面向切面编程,符合横切关注点的功能都可以放在拦截器使用
登陆验证
权限验证
日志记录 记录请求操作日志,统计请求访问量。
处理cookie
性能监控,监控处理时长。
执行顺序考量
先定义拦截器先执行。
还可以通过order方法设置执行顺序,值越小越先执行。
过滤器
servlet的一个组件,实现用户访问某个资源前,对访问请求和响应进行过滤。
原理
基于函数回调,一个过滤器实例只能在容器初始化调用一次。
与拦截器区别
不能获取ioc容器的bean
Filter>>interceptor>>controllerAdvice>>aspect>>controller
实现过滤器方法
注解方式
@Order(2)
@WebFilter(filterName = "sampleFilterAnnotation",urlPatterns = {
"/study/interfaces/v1/user/*"})
public class SampleFilterAnnotation implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化filter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入过滤器前做的事");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("处理返回的response");
}
@Override
public void destroy() {
System.out.println("过滤器被销毁");
}
}
上面的参数,自行百度。
最后
配置完以上,需要在启动类加一个扫描包的注解,开启包扫描。
工具的使用学一下都很快,在什么场景下,怎么使用,这才是需要花费心思去琢磨的。
边栏推荐
- New stage of investment
- Getaverse,走向Web3的远方桥梁
- 第4章 复合类型
- 深度学习中Dropout原理解析
- JVM方法调用
- Pam4 popular science
- Redis data type
- FPGA 20 routines: 9. DDR3 memory particle initialization write and read through RS232 (Part 1)
- ETL development tool kettle download installation environment construction and use tutorial
- Oracle EBS form common objects and their relationships
猜你喜欢

OPENGL学习(四)GLUT三维图像绘制

Leetcode memory deep search / dynamic planning V2

Understand dynamic calculation diagram, requires_ grad、zero_ grad

Principle and application of database

Create parent-child projects in clion (cmake tool) and introduce the method of third-party libraries

深度学习中Dropout原理解析
![[wechat applet development] custom tabbar case (custom message 99 + little hearts)](/img/49/354ecb448e91d9e15aaec4922a62e1.png)
[wechat applet development] custom tabbar case (custom message 99 + little hearts)

今日睡眠质量记录79分

Summer Niuke multi school 1:i chiitoitsu (expectation DP, inverse yuan)

Analysis of dropout principle in deep learning
随机推荐
Ionic4 learning notes 11 - popular goods display of an East Project
Typora user manual
Leetcode memory deep search / dynamic planning V2
Eternal Blue ms17-010exp reappears
Equals() method of object class
Introduction to VIM
Generate publickey with der format public key and report an error
TCL programming style guide
2022 Hangdian multi school second session 1009 shuangq (Mathematics)
Tcl/tk grouping and replacement rules
引发0xC0000005内存违例几种可能原因分析
MySQL -- implicit conversion of data type
Converter
[question 39] special question for Niuke in-depth learning
OpenGL learning (III) glut two-dimensional image rendering
知乎上的那些神回复
Latex mathematical formula
永恒之蓝MS17-010exp复现
Go小白实现一个简易的go mock server
Convolution neural network receptive field calculation Guide