SpringMVC中自定义拦截器

SpringMVC 中自定义拦截器

了解:

  1. Interceptor拦截器的主要作用是拦截用户的请求并进行相应的处理。SpringMVC拦截器是可插拔式的设计,在配置文件中配置或取消即可。
  2. HandlerInterceptor接口:
  • Interceptor拦截器拦截请求是通过实现HandlerInterceptor接口实现的。定义一个Interceptor拦截器通常在该类中实现HandlerInterceptor接口,或者继承抽象类HandlerInterceptorAdapter。
  1. HandlerInterceptor接口中定义了三个方法:
  • boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handle) :
    该方法在请求处理之前被调用。返回false表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为true时,就会继续调用下一个Interceptor的preHandle方法,若已经是最后一个Interceptor,就会调用当前请求的Controller。
  • void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView mv) :
    该方法只能在当前所属的interceptor的preHandle方法返回true之后才能被调用。在Controller方法之后DispatherServlet进行视图返回渲染之前执行,可以对Controller方法返回的ModelAndView对象进行操作。先声明该方法的Interceptor会后执行。
  • void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception exception) :
    该方法会在当前所属Interceptor的prehandle方法返回true时执行。该方法在DispatcherServlet渲染了对应的视图之后执行。

步骤:

一丶创建一个类 并继承 HandlerInterceptorAdapter
public class LoginInterceptor extends HandlerInterceptorAdapter {
    /**
     * 在业务处理器处理请求之前被调用
     * - 如果返回false
     * 从当前的拦截器往回执行所有拦截器的afterCompletion()方法,再退出拦截器链
     * - 如果返回true
     * 执行下一个拦截器,知道素有的拦截器都执行完毕
     * 再执行被拦截的Controller
     * 然后进入拦截器链,
     * 从最后一个拦截器往回执行所有的postHandel()方法
     * 接着再从最后一个拦截器往回执行所有的afterCompletion()方法
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HttpSession session = request.getSession();
        String[] noNeedAuthPage = new String[]{
                "/home",
                "/admin"
        };
        String uri = request.getRequestURI();
        if (!Arrays.asList(noNeedAuthPage).contains(uri)) {
            User user = (User) session.getAttribute("user");
            if (null == user) {
                response.sendRedirect("/loginPage");
                return false;
            }
        }
        return true;
    }

    /**
     * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
     * 可在 modelAndView 中加入数据,比如当前的时间
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    /**
     * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
     * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()方法
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
    }
}
二丶在SpringMVC配置文件中注册拦截器
<!-- 拦截器 -->
    <mvc:interceptors>
  	   /**
  		*如果有多个拦截器 , 可以继续通过<mvc:interceptor>继续注册
  		*/
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean class="cbuc.tmall.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

End …

以上便是SpringMVC中拦截器的配置, 欢迎参考交流 …

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值