SpringMVC&&&拦截器基本配置
程序员文章站
2022-07-09 18:14:28
...
SpringMVC-拦截器
拦截器
拦截器(Interceptor) 是一种动态拦截方法调用的机制
作用:
1.在指定的方法调用前后执行预先设定的代码
2.阻止原始方法的执行
核心原理:AOP思想
拦截器链:多个拦截器按照一定的顺序,对原始被调动的功能进行增强
拦截器和Filter有什么不同
- 拦截器是springMVC的技术,拦截控制的Controller(拦截springbean)
- filter是tomcat中所有接收到的请求都可以被拦截
拦截器使用
1. 编写一个拦截器
实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
//处理器运行之前处理
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("前置运行----a1");
//返回值为false将拦截原始处理器的运行
//如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
return true;
}
//处理器运行之后执行
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("后置运行----b1");
}
//所有拦截器的后置执行全部结束后,执行该操作
//拦截器最后执行的方法,无论原始方法是否执行
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("完成运行----c1");
}
}
//三个方法的运行顺序为 preHandle -> postHandle -> afterCompletion
//如果preHandle返回值为false,三个方法仅运行preHandle
2. 配置拦截在何时生效
<!--开启拦截器使用-->
<mvc:interceptors>
<!--开启具体的拦截器的使用,可以配置多个-->
<mvc:interceptor>
<!--设置拦截器的拦截路径,支持*通配-->
<!-- /** 表示拦截所有映射 表示根路径及其子路径下任意名称-->
<!-- /* 表示拦截所有/开头的映射 仅表示根路径下的任意名称不再往下匹配目录-->
<!-- /user/* 表示拦截所有/user/开头的映射-->
<!-- /user/add* 表示拦截所有/user/开头,且具体映射名称以add开头的映射-->
<!-- /user/*All 表示拦截所有/user/开头,且具体映射名称以All结尾的映射-->
<!--<mvc:mapping path="/*"/>-->
<mvc:mapping path="/**"/>
<mvc:mapping path="/handleRun*"/>
<!-- exclude-mapping 用于剔除不符合要求的配置项加速配置过程 ,设置拦截排除的路径,配置/**或/*,达到快速配置的目的-->
<mvc:exclude-mapping path="/b*"/>
<!--指定具体的拦截器类-->
<bean class="com.itheima.interceptor.MyInterceptor"/>
</mvc:interceptor>
<!--配置多个拦截器,配置顺序即为最终运行顺序-->
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.itheima.interceptor.MyInterceptor2"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.itheima.interceptor.MyInterceptor3"/>
</mvc:interceptor>
</mvc:interceptors>
拦截器链配置
注意: 配置顺序为先配置执行位置,后配置执行类
- 请求必须携带token(随机字符串)
- token是每次后端响应给用户
- 实现步骤
- 后端存储token在session
- 前端传token在request的parameter中
责任链模式
上一篇: 八皇后问题
下一篇: springmvc----拦截器