拦截器
-
原理
-
springmvc的拦截器
针对请求和响应进行额外的处理,在请求和响应的过程中添加预处理,后处理和最终的处理
-
拦截器的执行时间
-
preHandle():在请求被处理之前进行操作,预处理
-
postHandle():在请求被处理之后,但是结果还没有渲染前进行操作,可以改变响应结果,后处理
-
afterCompletion:所有的响应结束后执行善后工作,清理对象,关闭资源,最终处理
-
拦截器实现的两种方式
-
继承HandlerInterceptorAdater的父类
-
实现HandlerInterceptor接口,推荐方式
-
-
拦截器实现步骤
-
改造登录方法,在session中存储用户信息,用于进行权限验证
-
开发拦截器的功能,实现接口,重写preHandle方法
-
在springmvc.xml文件中注册拦截器
-
-
配置拦截器依赖
<!-- 注册拦截器--> <mvc:interceptors> <mvc:interceptor> <!-- 设置拦截请求(所有)--> <mvc:mapping path="/**"/> <!-- 设置放行请求--> <mvc:exclude-mapping path="/showLogin"/> <mvc:exclude-mapping path="/login"/> <!-- 配置拦截器实现功能类--> <bean class="com.lgy.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
拦截器功能实现类
package com.lgy.interceptor; import org.springframework.web.servlet.HandlerAdapter; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(request.getSession().getAttribute("user")==null){ request.setAttribute("msg","你还没登录,请先登录"); request.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,response); return false; } return true; } }