多个拦截器执行顺序
拦截器和过滤器的区别
2222222222222222
22222222222
666666666666666666666666666
555555555555555555555
22222222222222222222
1111111111111111111111111111111
333333333333333
通过实现HandlerInterceptor类来创建使用多个拦截器时,在配置文件中配置的顺序就是preHandle的执行顺序,而postHandle与afterCompletion方法执行的顺序则与配置的拦截器顺序刚好相反
过滤器: 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
过滤器Filter由servlet容器进行管理,基于回调函数,过滤范围大,能够过滤所有请求,比如资源之类的
拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求
过滤器是在web.xml文件中配置
拦截器是在spring.xml配置文件中配置
多个拦截器执行顺序
拦截器的实现:1.编写一个类实现拦截器接口 ,目的是所有的请求都能经过这个拦截器的类,通过这个拦截器对我们的请求做处理
拦截器类编写完成,不代表所有的请求都能经过(执行到)拦截器么?
2.将拦截器注册进SpringMVC框架中,springMVC配置文件
<mvc:interceptors>要用到mvc命名空间,引入相关约束
3.配置拦截器的拦截规则
<init-name> <param-name>encoding</param-name>//必须是encoding <param-value>UTF-8<param-value> </init-name>
拦截器和过滤器的区别
拦截器的使用场景
使用原则: 处理所有请求的共同问题:
2、解决权限验证问题
在 preHandle 方法中对用户的登录状态进行验证
拦截器的使用场景
使用原则: 处理所有请求的共同问题:
1、解决乱码问题
2、解决权限验证问题
1、 preHandle 方法,会在请求处理之前被执行,其返回的 boolean 用于表示是否继续执行;true 表示 请求被继续执行;false表示请求将被终止:
示例:
可以看到 输出了 “执行到了 preHandle方法” 后,就没有其他的业务逻辑被执行输出了
1、 preHandle 方法,会在请求处理之前被执行,其返回的 boolean 用于表示是否继续执行;true 表示 请求被继续执行;false表示请求将被终止
拦截器的方法介绍
拦截器的实现:
3、配置拦截器的拦截规则
使用<mvc:interceptor>中的<mvc:mapping path="xxx"/>来配置拦截的规则;
例如: <mvc:mapping path="/viewAll.form"/>代表配置的是拦截以 viewAll.form 为结果的请求;而不能拦截到 "/query"的请求
拦截器的实现:
3、配置拦截器的拦截规则
使用<mvc:interceptor>中的<mvc:mapping path="xxx"/>来配置拦截的规则;
例如: <mvc:mapping path="/viewAll.form"/>代表配置的是拦截以 viewAll.form 为结果的请求;而不能拦截到 "/query"的请求
拦截器的实现:
拦截器注册到SpringMVC的执行结果
拦截器的实现:
2、将拦截器注册进SpringMVC框架中
拦截器的实现:
1、编写拦截器类实现HandlerInterceptor接口