SpringMVC 中的拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆。
Spring MVC 的拦截器类似于Servlet中的拦截器!需要先定义一个类实现HandlerInterceptor接口。添加未实现的方法,在springmvc配置中配置,具体实现步骤如下:乱码过滤
package com.lx.controller;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
/**
* 该方法在目标方法之前被调用
* 若返回值为true,则继续调用后去的拦截器和目标方法
* 若返回值为false,则不会再调用后续的拦截器和方法
* 可以考虑做权限.日志,事务,等.
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("text/htm;charset=utf-8");
System.out.println("ddddd");
return true;
}
/**
* 调用目标方法之后,但渲染视图之前.
* 有modelAndView对象,可以对请求域中的属性或视图做出修改.
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
* 渲染视图之后调用,释放资源.
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
-boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler):在请求到达Handler之前,先执行这个前置处理方法.当该方法返回false时,请求直接返回,不会传递到链中的下一个拦截器,更不会传递到链尾的Handler,只有返回true时,请求才会向链中的下一个处理节点传递!
-
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView); 在相应已经被渲染后,执行该方法.
-
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex); 在响应已经被渲染后,执行该方法!
SpringMVC的配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.lx.controller.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
注意其中的mvc:interceptor标签,子标签下有<mvc:mapping path="" />,<mvc:exclude-mapping path=""/>,分别是作用路径和不作用路径。