初学springMVC的拦截器
springMvc拦截器的执行顺序!
拦截器的各个方法的作用:
/** * 登录验证拦截器 */
public class Intercepter implements HandlerInterceptor {
/*
* 执行时机:视图已经被解析完毕,类似try catch 后的finally,追踪错误 */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { } /** * 执行时机:controller执行完,视图解析器没有把视图解析成页面, * 对视图做统一的修改,主要体现在Model上,可以追加数据 */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception { Map<String,Object> map=mv.getModel();
map.put("test","append something"); } /** * 执行时机:在执行controller之前来执行 * 返回值类型:boolean:true代表放行可以访问controller,false不可以访问controller */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { return false; } }
写了两个拦截器,配置如下:
<!-- 配置拦截器 --> <mvc:interceptors> <!-- 多个拦截器,顺序执行 --> <mvc:interceptor> <mvc:mapping path="/**"/><!-- 表示所有的url,包括子url路径 --><!-- 某一模块的拦截:/myPath/**, 拦截所有的请求/**--> <bean class="com.interceptors.EncodingInterceptor"></bean> </mvc:interceptor> <!--配置登陆拦截器 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.interceptors.LoginHandlerIntercepter"></bean> </mvc:interceptor> </mvc:interceptors>
没写什么逻辑,就打印了log,LoginHandlerIntercepter中的log是01
结果简略如下:
preHandle.........
preHandle01.........
...
...
...
postHandle01.........
postHandle.........
...
...
...
afterCompletion01.........
afterCompletion.........
可以看出,按照拦截器的配置顺序先执行了字符拦截器,后执行了登录验证的拦截器;
但是:preHandler是按照拦截器的配置顺序执行的,而postHandler和afterCompletion是按照拦截器的配置顺序的倒序执行的
所以 :
如果统一日志处理器拦截器,需要改拦截器prehandler一定要返回true,且将它放在拦截器配置的第一个位置;
如果登陆认证拦截器,放在拦截器的配置中的第一个位置(有日志处理的话,放在日志处理下面);
如果有权限校验拦截器,则放在登陆拦截器之后,因为登陆通过后,才可以进行校验权限;
暂且记录这些。。。。
分类:
Java杂记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)