• SpringMVC(五)——拦截器


    1.概述

    SpringMVC的拦截器(Interceptor)类似于Servlet的过滤器(Filter),它主要用于拦截用户请求并做出相应的处理。例如拦截未登录用户、进行权限验证、记录请求信息的日志等。

    2.拦截器的实现

    (1)拦截器类

    实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类

    public class UserInterceptor implements HandlerInterceptor{
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
            System.out.println("User拦截器执行了preHandle()");
            return true;
        }
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mav)
                throws Exception {
            System.out.println("User拦截器执行了postHandle()");
        }
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception e)
                throws Exception {
            System.out.println("User拦截器执行了afterCompletion()");
        }
    }

     preHandler():该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;当其返回值为false时,会中断后续的所有操作。

    postHandle():该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。

    afterCompletion():该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。

    (2)配置拦截器

    先引入mvc命名空间

        <!-- 配置一组拦截器 -->
        <mvc:interceptors>
            
            <!-- <interceptors>标签下的类将拦截所有请求 -->
            <bean class="com.mvc.interceptor.UserInterceptor"/>
            
            <!-- 拦截器1,严格按顺序配置拦截路径、不拦截路径、拦截器类 -->
            <mvc:interceptor>
                <mvc:mapping path="/**/"/>
                <mvc:exclude-mapping path=""/>
                <bean class="com.mvc.interceptor.Interceptor1" />
            </mvc:interceptor>
        
            <!-- 拦截器2,同上 -->
            <mvc:interceptor>
                <mvc:mapping path="/**/"/>
                <mvc:exclude-mapping path=""/>
                <bean class="com.mvc.interceptor.Interceptor2" />
            </mvc:interceptor> 
        </mvc:interceptors>

    (3)执行过程

    单个拦截器:发起请求,preHandler()方法如果返回true,处理请求的方法,postHandle()方法,afterCompletion()方法。

    多个拦截器:如上按照User拦截器、拦截器1、拦截器2来执行preHandler()方法,但是postHandle()方法和afterCompletion()方法按照preHandler()的逆序来执行。

  • 相关阅读:
    下载网易云音乐的MV
    如何免费的让网站启用https
    阿里云centos7.x 打开80端口(转)
    阿里云服务器Centos7.4开放80端口的记录
    在线检测域名或者ip的端口是否开放(http://coolaf.com/tool/port)
    重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    视频录制剪辑工具
    迷你音乐播放器v1.0正式上线!
    网页音乐播放器
    网站菜单CSS
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/13114535.html
Copyright © 2020-2023  润新知