Spring MVC 拦截器
来源:互联网 发布:linux虚拟主机 编辑:程序博客网 时间:2024/06/15 10:48
拦截器的实现
1、配置拦截器
首先在springmvc.xml中加入自己定义的拦截器
<!--配置拦截器, 多个拦截器,顺序执行 --> <mvc:interceptors> <mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/" /> <mvc:mapping path="/user/**" /> <mvc:mapping path="/test/**" /> <bean class="com.alibaba.interceptor.CommonInterceptor"></bean> </mvc:interceptor> <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --> </mvc:interceptors>
2、编写拦截器类实现HandlerInterceptor接口
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法。
重写这三个方法实现我们的逻辑。
1. preHandle在业务处理器处理请求之前被调用。
2. postHandle在业务处理器处理请求执行完成后,生成视图之前执行。
3. afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。
public class CommonInterceptor extends HandlerInterceptorAdapter{ /** * 在业务处理器处理请求之前被调用 * 如果返回false * 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 * 如果返回true * 执行下一个拦截器,直到所有的拦截器都执行完毕 * 再执行被拦截的Controller * 然后进入拦截器链, * 从最后一个拦截器往回执行所有的postHandle() * 接着再从最后一个拦截器往回执行所有的afterCompletion() */ @Override public boolean preHandle(HttpServletRequest request, log.info("==============执行顺序: 1、preHandle================"); String username = (String)request.getSession().getAttribute("user"); if(username == null){ log.info("Interceptor:跳转到login页面!"); request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); return false; }else return true; } /** * 在业务处理器处理请求执行完成后,生成视图之前执行的动作 * 可在modelAndView中加入数据,比如当前时间 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("==============执行顺序: 2、postHandle================"); if(modelAndView != null){ //加入当前时间 modelAndView.addObject("var", "测试postHandle"); } } /** * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 * * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("==============执行顺序: 3、afterCompletion================"); } }
1 0
- Spring MVC 拦截器
- Spring MVC 拦截器
- Spring MVC 拦截器
- spring MVC拦截器
- Spring MVC拦截器
- spring mvc 拦截器
- spring mvc 拦截器
- spring mvc 拦截器
- Spring mvc 拦截器
- spring mvc 拦截器
- spring mvc 拦截器
- spring mvc 拦截器
- Spring MVC 拦截器
- spring mvc拦截器
- spring mvc拦截器
- spring mvc拦截器
- spring mvc拦截器
- spring mvc 拦截器
- hdu2066 一个人的旅行 (floyd)
- 大型网站架构系列:消息队列(二)
- Linux文件系统基础(1)
- __attribute__((packed))详解
- 从输入网址到显示网页的全过程分析
- Spring MVC 拦截器
- SHUOJ 1724 单侧跳马问题(BFS)
- UVA 10006_Carmichael number
- "java *.java"报错:找不到或无法加载主类
- hdoj 2049 不容易系列之(4)——考新郎
- 欢迎使用CSDN-markdown编辑器
- SHUOJ 1552 滑雪(小数据)(BFS)
- ad15 的redefine board shape 在哪
- 深入理解Aireplay-ng各种攻击及其原理