springMVC拦截器(登入后才能访问别的页面)

1、先建一个用于拦截的类

package cn.meiriting.manager.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import cn.meiriting.base.pojo.MrtManage;

public class CommonInterceptor extends HandlerInterceptorAdapter{

/**
* 登入拦截器
*
* */

private final Logger log = LoggerFactory.getLogger(CommonInterceptor.class);  
    /* 
     * 利用正则映射到需要拦截的路径 
 
    private String mappingURL; 
 
    public void setMappingURL(String mappingURL) { 
               this.mappingURL = mappingURL; 
    } 
  */  
    /** 
     * 在业务处理器处理请求之前被调用 
     * 如果返回false 
     *     从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 
     * 如果返回true 
     *    执行下一个拦截器,直到所有的拦截器都执行完毕 
     *    再执行被拦截的Controller 
     *    然后进入拦截器链, 
     *    从最后一个拦截器往回执行所有的postHandle() 
     *    接着再从最后一个拦截器往回执行所有的afterCompletion() 
     */  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        if ("GET".equalsIgnoreCase(request.getMethod())) {  
            //RequestUtil.saveRequest();  
        }  
        log.info("==============执行顺序: 1、preHandle================");  
        String requestUri = request.getRequestURI();  
        String contextPath = request.getContextPath();  
        String url = requestUri.substring(contextPath.length());  
  
        log.info("requestUri:"+requestUri);  
        log.info("contextPath:"+contextPath);  
        log.info("url:"+url);  
  
        MrtManage manage =  (MrtManage) request.getSession().getAttribute("manage");  
        if(manage == null){  
            response.setCharacterEncoding("UTF-8");  

            log.info("Interceptor:跳转到login页面!");  

            //页面被拦截之后,转发到登入页面去

            request.getRequestDispatcher("/manage/goLogin").include(request, response);  
            return false;  
        }else  
            return true;  
    }  
  
    /** 
     * 在业务处理器处理请求执行完成后,生成视图之前执行的动作 
     * 可在modelAndView中加入数据,比如当前时间 
     */  
    @Override  
    public void postHandle(HttpServletRequest request,  
                           HttpServletResponse response, Object handler,  
                           ModelAndView modelAndView) throws Exception {  
        log.info("==============执行顺序: 2、postHandle================");  
        if(modelAndView != null){  //加入当前时间  
            modelAndView.addObject("var", "测试postHandle");  
        }  
    }  
  
    /** 
     * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 
     * 
     * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() 
     */  
    @Override  
    public void afterCompletion(HttpServletRequest request,  
                                HttpServletResponse response, Object handler, Exception ex)  
            throws Exception {  
        log.info("==============执行顺序: 3、afterCompletion================");  
    }  

}


2、在springmvc.xml配置

<!-- 后台登入拦截器  -->
<mvc:interceptors>  
    <mvc:interceptor>  
        <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller   -->
        <mvc:mapping path="/**" /> 
    <!--     不拦截的连接   -->
      <mvc:exclude-mapping path="/manage/getManagePhone"/>
        <mvc:exclude-mapping path="/manage/goLogin"/>
        <mvc:exclude-mapping path="/manage/login"/>
        <mvc:exclude-mapping path="/js/**"/>
        <mvc:exclude-mapping path="/static/**"/>
        <bean class="cn.meiriting.manager.web.controller.CommonInterceptor"></bean>  
    </mvc:interceptor>  
  <!--   当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法   -->
</mvc:interceptors>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值