SpringMVC之拦截器(interceptors)的简介及用法

一、什么是拦截器?

spring提供的一个特殊的组件,当DispatcherServlet收到请求之后,如果有拦截器,会先调用拦截器,然后调用响应的处理器(Controller)。 注: 过滤器属于servlet规范,而拦截器属于spring框架。

二、如何写一个拦截器?

1.写一个java类,实现HandlerInterceptor接口

//实现HandlerInterceptor接口 
//可自动生成preHandle()、postHandle()、afterCompletio()方法
public class SomeInterceptor 
    implements HandlerInterceptor{
    /**
     * DispatcherServlet收到请求之后,会先调用preHandle方法
     * 如果该方法的返回值为true,则继续向后调用 
     * 如果该方法的返回值为false,则不再向后调用
     * 
     * Object handler:描述处理器方法的一个对象
     */
    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("preHandle()");
        return true;
    }
    /**
     * 处理器(Controlle)的方法已经执行完毕
     * 正准备将结果(ModelAndView对象)返回
     * 给DispatcherServlet之前执行postHandle方法
     * 可以在该方法里去修改处理器返回的结果
     */
    public void postHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle()");
    }

    /**
     * 当preHandle返回值为true该方法才会执行
     * afterCompletion在postHandle方法执行之后才执行
     * 
     * Exception ex处理处理器所抛出的异常,可以写一个拦截器用来处理处理器抛出的异常
     */

    public void afterCompletion(HttpServletRequest request, 
            HttpServletResponse response, 
            Object handler, Exception ex)
            throws Exception {
        System.out.println("afterCompletion()");
    }

}

2.实现具体的拦截处理逻辑。比如:session验证

public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("preHandle()");
        HttpSession session= 
                request.getSession();

        Object obj = 
                session.getAttribute("admin");
        if(obj == null) {
            //未登录,重定向到登录界面
            response.sendRedirect("toLogin.do");
            return false;
        }
        return false;
    }

3.配置拦截器

<!-- 配置拦截器 -->
        <!-- 如果有多个拦截器,会按照配置的先后顺序执行 -->
        <mvc:interceptors>
            <mvc:interceptor>
                <!-- 拦截器路径配置 -->
                <!-- 拦截路径多的话会分层多加一个*号
                     即拦截所有的请求路径为/**
                 -->
                <!-- 要拦截的路径 -->
                <mvc:mapping path="/**"/>
                <!-- 拦截器不需要拦截的路径 -->
                <mvc:exclude-mapping path=""/>
                <!-- 拦截器类 -->>
                <bean class="拦截器要拦截的java代码路径">
            </mvc:interceptor>
        </mvc:interceptors>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值