springmvc 中自定义拦截器

来源:互联网 发布:.us域名查询 编辑:程序博客网 时间:2024/05/29 18:16

1、自定义拦截器,实现HandlerIterceptor接口

package cn.zzsxt.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import cn.zzsxt.entity.Userinfo;/** * 用户登陆的访问权限控制 * @author Think * */public class LoginIntercetor implements HandlerInterceptor {/**     * 在控制器方法调用前执行     * 返回值为是否中断     * true,表示继续执行(下一个拦截器或处理器)     * false则会中断后续的所有操作,所以我们需要使用response来继续响应后续请求*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {System.out.println("LoginInterceptor...preHandle");//获取sessionHttpSession session = request.getSession();Userinfo user = (Userinfo)session.getAttribute("loginUser");if(user!=null){//登陆用户return true;}else{String path=request.getServletContext().getContextPath();System.out.println("path="+path);response.sendRedirect(path+"/login.jsp");return false;}}/*** 在控制器方法调用后,解析视图前调用,我们可以对视图和模型做进一步渲染或修改     * 可在modelAndView中加入数据,比如当前时间*/@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {}/*** 整个请求完成,即视图渲染结束后调用,这个时候可以做些资源清理工作,或日志记录*/@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {}}

2、配置springmvc.xml

<!--配置拦截器, 多个拦截器,顺序执行 --><mvc:interceptors>    <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->       <mvc:interceptor>            <mvc:mapping path="/**"/>            <mvc:exclude-mapping path="/user/login"/>            <bean class="cn.zzsxt.interceptor.LoginIntercetor"></bean>        </mvc:interceptor>    <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --></mvc:interceptors>