一、关于拦截器的定义
springmvc拦截器是用来拦截用户的请求进行相应的处理。
二、拦截器的主要用途
- 日志记录
- 权限检查
- 性能监控(可以记录一个接口从访问开始到结束的时间)
- 通用行为(加载cookie等)
三、自定义拦截器实现方式
1.实现接口 实现HandlerInterceptor
2.继承类 继承实现了HandlerInterceptor接口的类HandlerInterceptorAdapter
四、拦截器内容
public class InterceptorLogin implements HandlerInterceptor {
/**
* 请求处理完成之后执行
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion请求处理完成之后执行");
}
/**
* 请求处理之后执行
*/
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2, ModelAndView arg3) throws Exception {
System.out.println("postHandle请求处理之后执行");
}
/**
* 请求处理之前执行
* 如果返回FALSE,后面就不会执行
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2) throws Exception {
System.out.println("preHandle请求处理之前执行");
if(request.getSession().getAttribute("user")==null){
System.out.println("用户没有登录,需要跳转");
response.sendRedirect(request.getContextPath() + "/system/index");
return false;
}
return true;
}
}
如上,自定义拦截器有三个方法:
1.preHandle
请求处理之前执行,返回值为布尔,如果返回的false,则后面的请求以及拦截器都不会执行
2.postHandle
请求处理之后执行
3.afterCompletion
请求处理完成之后执行
上面的代码是通过判断session中是用户是否为空来判断用户是否登录,那么需要在登录的时候将用户信息放入session
五、配置拦截器生效
<mvc:interceptors>
<!-- <bean class="com.springmvc.interceptor.InterceptorAll"></bean> -->
<mvc:interceptor>
<!-- 配置需要拦截的url -->
<mvc:mapping path="/zhh/**"/>
<!-- 拦截器类定义 -->
<bean class="com.springmvc.interceptor.InterceptorLogin"></bean>
</mvc:interceptor>
</mvc:interceptors>