springMVC拦截器应用

springMVC拦截器在对一些请求有特定功能的需求的时候很有用,比如在请求时对用户检查身份等。


SpringMVC拦截器原理

SpringMVC拦截器实现了org.springframework.web.servlet包下的HandlerInterceptor接口,这个接口定义了三个回调方法:
  • preHandle()
  • postHandle()
  • afterCompletion()
    preHandle()方法在处理器实际执行之前会被执行,postHandle()方法在处理器执行之后执行,afterCompletion()在整个请求处理完成之后被执行。这三个方法为各种类型的前处理和后处理需求提供了足够的灵活性。
    preHandle(..)方法返回一个boolean值。你可以通过这个方法来决定是否继续执行处理链中的部件。当方法返回 true时,处理器链会继续执行;若方法返回 false, SpringMVC的核心“DispatcherServlet”即认为拦截器自身已经完成了对请求的处理(可以认为成功拦截),那么其余的拦截器以及执行链中的其他处理器就不会再被执行了。

xml配置

springMVC的拦截器用 interceptors配置:

<mvc:interceptors>  
        <mvc:interceptor>  
            <mvc:mapping path="/bc/**"/> 
            <mvc:exclude-mapping path="/news/**"/>
            <bean class="com.evcipa.comutil.Interceptor" />  //具体的拦截类
        </mvc:interceptor>  
</mvc:interceptors> 

mapping path是需要拦截的匹配路径,而exclude-mapping path是不需要拦截的路径,如果在整个通配符匹配的拦截路径中有因业务需要而不要求拦截的路径,可用exclude-mapping path剔除。

package com.evcipa.comutil;

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

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Interceptor implements HandlerInterceptor {

     private final Logger logger = Logger.getLogger(Interceptor.class);
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
         Object obj = request.getSession().getAttribute("userType");
            if (obj == null) {
                response.sendRedirect(request.getContextPath()+"/views/502.jsp");
                logger.info("session失效!");
                return false;
            }else{
                 return true;
            }
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }
}

在接收到请求并拦截成功后,页面会被重定向到拧另一个页面。注意:在拦截成功后一定要返回false。这样处理器才会做后续的处理,正确的渲染视图。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值