spring MVC拦截器
来源:互联网 发布:定制化软件 编辑:程序博客网 时间:2024/06/04 19:31
spring MVC中的拦截器是非常重要的,他的主要作用是拦截用户 的请求并进行相应的处理,,例如权限验证,或者判断用户是否登录
使用拦截器有两种方式,第一种是定义Interceptor实现类,第二种是实现HandlerInterceptor
springMVC中的interceptor拦截请求是通过handlerinterceptor来实现的。在springmvc中定义 一个interceptor非常简单,主要有两种方式,第一种是定义一个interceptor类,要实现spring的HandlerInterceptor接口,或者也可以实现继承实现了handlerInterceptor接口的类,第二种方式是实现了spring的WebRequestInterceptor接口
第二种方式是实现了HandlerIntercepter接口,这个接口中定义了三个方法,我们就是通过这三个方法来控制拦截的,
package cn.mvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class TestInterceptor implements HandlerInterceptor { /** * 只有preHandle返回true才会被执行 * 在视图解析器执行后执行 * 一般用于清理工作 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("after completion"); } /** * preHandle执行后返回true才能执行 * 此方法在处理器执行后,数据模型被渲染前执行 * 一般可用于处理数据模型需要注意的是preHandle先调用,那么postHandle就会被后调用 */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("post------"); } /** * 在处理器执行前执行会返回一个boolean值,只有返回true才可以执行下一个拦截器,或处理器方法,false不继续执行 * 一般进行初始化动作 */ @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {// 拿到请求路径进行判断 String uri = req.getRequestURI(); if(uri.endsWith("login")){ System.out.println("woshi yi1111"); return true; } if(req.getSession().getAttribute("name")!=null){ return true; } req.getRequestDispatcher("login.jsp").forward(req, resp); return true; }}
prehandle(HttpServletRequest request, HttpServletResponse response, Object handle)该方法是在请求处理之前进行调用的,在一个springMVC中可以存在多个interceptor,每个都会有一个prehandle
postHandle()这个方法是在prehandle方法返回true的时候执行的,postHandle在处理器执行后。在数据模型被渲染前执行
一般可以用于处理数据模型,需要注意 的是prehandle 先调用,它就会后调用
afterCompletion(),他是最后执行的,同上,它也是等到prehandler返回true的时候才会调用,一般用于清理工作
实现上面的方法还要配置文件
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/hello.do"/> <bean class="cn.bjsxt.interceptor.MyInterceptor"></bean> </mvc:interceptors>
最后说一下多拦截器的执行顺序
A(preHandle)—> B(preHandle) –> controller –> B(postHandle) –> A(postHandle)—> View –> B(afterCompletion) –> A (afterCompletion)
- 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 拦截器
- (145)光线追踪距离场柔和阴影
- 编程提升关键-编程思维
- 垃圾收集器与内存分配策略
- 正则表达式学习笔记
- 用datetime和pytz来转换时区
- spring MVC拦截器
- Android中ConstraintLayout布局
- 1.3 离散信号的频域分析
- 欢迎使用CSDN-markdown编辑器
- 第1-2周前端学习心得
- 汇编--学习笔记(十三)-中断(二)- 自我总结
- HTML First day
- mr性能调优
- XML DOM解析详细介绍_JS版