拦截器
在Servlet里面了解过过滤器,这里介绍的是拦截器,拦截action的
创建拦截器
public class MyInterceptor implements HandlerInterceptor {
//在Controller方法执行后被执行
//处理异常、记录日志
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("MyInterceptor.afterCompletion.....");
}
//在Controller方法执行后,返回ModelAndView之前被执行
//设置或者清理页面共用参数等等
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("MyInterceptor.postHandle.....");
}
//在Controller方法执行前被执行
//登录拦截、权限认证等等
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor.preHandle.....");
//返回true放行,false拦截
return true;
}
}
配置文件
<!-- 拦截器定义 -->
<mvc:interceptors>
<!-- 定义一个拦截器 -->
<mvc:interceptor>
<!-- path配置</**>拦截所有请求,包括二级以上目录,</*>拦截所有请求,不包括二级以上目录 -->
<mvc:mapping path="/**"/>
<bean class="interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
- 通过以上简单的两步就配置好了拦截器
- 首先创建一个自己的拦截器类,实现对应接口
- 配置文件中配置相应的拦截器
补充
- 如果有多个拦截器就直接创建多个拦截器类即可
- 然后在配置文件的
<mvc:interceptors></mvc:interceptors>
中配置 - 进入拦截器的顺序是按照配置的顺序,先配置的先进
- 拦截器出来的顺序与此相反,就如同栈一个道理
- 如果有些页面不经过拦截器,可以通过属性在
<mvc:interceptor><mvc:interceptor>
中配置<mvc:exclude-mapping path="/user/*"/>
即可