1.spring拦截器,类似servlet的过滤器,用于处理相同或相似逻辑。
2.使用场景:权限控制、日志记录、性能监控
3.用法:(注意:转发不会拦截 )
A.添加依赖spring-context、spring-mvc
B.配置web.xml使用spring-mvc的restful风格
C.配置spring xml文件
注意:使用restful风格导致静态资源访问受限
<mvc:resources location="/javascript/" mapping="/js/**"></mvc:resources>
<!-- 拦截器处理功能 可以多个拦截器配置 按顺序--> <mvc:interceptors> <mvc:interceptor> <!-- 设置哪些请求要拦截 /**拦截所有请求--> <mvc:mapping path="/**"/> <!-- 设置不拦截的请求 --> <mvc:exclude-mapping path="/user/toLogin"/> <mvc:exclude-mapping path="/user/login"/> <!-- 使用哪个拦截器做拦截逻辑 --> <bean class="com.rong.intercepter.LoginIntercepter"></bean> </mvc:interceptor> </mvc:interceptors>
D.编写Controller
E.实现拦截器
1 /** 2 * spring拦截器实现: 3 * 1.实现拦截器接口HandlerInterceptor或拦截器抽象类 4 * 2.在拦截器的preHandle方法上实现拦截逻辑 5 * @author Administrator 6 * 7 */ 8 public class LoginIntercepter implements HandlerInterceptor{ 9 10 /** 11 * 请求到达Controller处理器之前执行,如果该方法返回true,则可以继续调用后续拦截器或者执行Controller的方法 12 * 如果方法返回false则不会执行后续处理 13 */ 14 @Override 15 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 16 throws Exception { 17 // TODO Auto-generated method stub 18 User user = (User) request.getSession().getAttribute("user"); 19 if(user!=null){ 20 return true;//放行 21 } 22 //如果没有登录,则跳转回登录页 23 response.sendRedirect("/user/toLogin"); 24 return false; 25 } 26 27 /** 28 * 请求到Controller,执行完Controller的方法后,渲染视图之前调用 29 */ 30 @Override 31 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 32 ModelAndView modelAndView) throws Exception { 33 34 } 35 36 /** 37 * 视图渲染完成后调用 38 */ 39 @Override 40 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 41 throws Exception { 42 43 } 44 45 }