SpringMVC 拦截器的使用「建议收藏」

SpringMVC 拦截器的使用「建议收藏」SpringMVC拦截器的使用1.拦截器作用2.单个拦截器3.多个拦截器参考资料:https://spring-mvc.linesh.tw/1.拦截器作用SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。可以定义拦截器链,连接器链就是将拦截器按着顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。拦截器和过滤器的功能比较类似,有以下区别:过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术;拦截器是SpringM

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

image-20200620175456961

1. 拦截器作用

SpringMVC 框架中的拦截器用于对处理器进行预处理后处理的技术。

可以定义拦截器链,连接器链就是将拦截器按着顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。

拦截器和过滤器的功能比较类似,有以下区别:

  • 过滤器是 Servlet 规范的一部分,任何框架都可以使用过滤器技术;
    拦截器是 SpringMVC 框架独有的

  • 过滤器配置了 /*,可以拦截任何资源;
    拦截器只会对控制器中的方法进行拦截

拦截器也是 AOP 思想的一种实现方式。

2. 单个拦截器

自定义拦截器,需要实现 HandlerInterceptor 接口。

  1. 创建自定义拦截器
public class MyInterceptor implements HandlerInterceptor { 
   
    /** * 预处理,controller 方法执行前 * 应用:用于身份认证、身份授权 * return true 放行,执行下一个拦截器,如果没有,执行 controller 中的方法 * return false 不放行,即不向下执行 */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
   
        System.out.println("preHandle");
        return true;
    }

    /** * 后处理方法,controller 方法执行后,方法跳转 success.jsp 执行之前 * 应用:从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图 */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 
   
        System.out.println("postHandle");
    }

    /** * success.jsp 页面执行后,该方法会执行 * 应用:统一异常处理,统一日志处理 */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 
   
        System.out.println("afterCompletion");
    }
}

Jetbrains全家桶1年46,售后保障稳定

  1. 在 springmvc.xml 中配置拦截器
   <!--配置拦截器-->
    <mvc:interceptors>
        <!--配置拦截器,多个拦截器时,顺序执行-->
        <mvc:interceptor>
            <!--要拦截的具体的方法-->
            <mvc:mapping path="/user/*"/>
            <!--不去拦截的方法 <mvc:exclude-mapping path=""/> -->
            <!--配置拦截器对象-->
            <bean class="com.qf.interceptor.MyInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
  1. 测试
@RequestMapping("/testInterceptor")
public String testInterceptor(){ 
   
    System.out.println("testInterceptor执行了...");
    return "success";
}

3. 多个拦截器

注意:

  • 多个拦截器时,按照 springmvc.xml 配置的顺序执行。
  • (2个拦截器时) 拦截器1 preHandle 不放行,postHandle 和 afterCompletion 不会执行。
  • (2个拦截器时) 拦截器1 preHandle 不放行,拦截器2不执行。

image-20200622192223998

2个拦截器的执行流程:

HandlerInterceptor1…preHandle
HandlerInterceptor2…preHandle

HandlerInterceptor2…postHandle
HandlerInterceptor1…postHandle

HandlerInterceptor2…afterCompletion
HandlerInterceptor1…afterCompletion

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234149.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件的静态测试_软件测试静态测试和动态测试的区别

    软件的静态测试_软件测试静态测试和动态测试的区别静态测试通常是指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程。静态测试的主要内容:①各阶段的评审、②代码检查、③软件复杂性分析、④软件质量度量①评审是对软件元素或项目状态进行评估的活动,用以确定与预期结果之间的偏差和相应的改进意见,一般评审包括培训评审、预备评审、同行评审。同行评审是由开发软件产品作者以外的其他人检查工作产品,以发现缺陷并寻找改进的机会同行评审一般包

    2025年7月2日
    5
  • map的遍历方式「建议收藏」

    map的遍历方式「建议收藏」@org.junit.TestpublicvoidtestHashMap(){Map<String,String>map=newHashMap<>(4);

    2022年7月3日
    31
  • 常见学习率衰减方式

    常见学习率衰减方式学习率学习率的作用​ 在机器学习中,监督式学习通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(cost来估计模型的参数。学习率(learningrate),在迭代过程中会控制模型的学习进度。​ 在梯度下降法中,都是给定的统一的学习率,整个优化过程中都以确定的步长进行更新,在…

    2022年6月7日
    44
  • Visual Studio——使用多字节字符集与使用Unicode字符集

    Visual Studio——使用多字节字符集与使用Unicode字符集vs配置选项“使用多字节字符集”和“使用Unicode字符集”的区别VS集成开发环境,字符集选择“使用多字节字符集”和“使用Unicode字符集”的直接区别就是:编译器是否增加了宏定义——UNICODE。当选择“使用Unicode字符集”时,编译器会增加宏定义——UNICODE;而选择“使用多字节字符集”时,编译器则不会增加宏定义——UNICODE。而是否增加了宏定义UNICODE,则…

    2025年8月15日
    3
  • 实战 FastCGI「建议收藏」

    实战 FastCGI「建议收藏」
    当网站日益走红,联机人数直线上升而心中暗自窃喜之时,突然客服中心涌来大批反应电话:『网站连不上去』、『按下去等好久画面才出来』、『一直出现ServerTooBusy…』...。看来又要把硬件升级了,但是再加更多的内存,更多CPU、换更贵的机器真的能解决问题吗?有没有比较省钱的方法呢?本文将介绍如何在阿帕契服务器上安装FastCGI的模块,如何设定及使用FastCGI网站应用程序,让你的网站程序在现有的架构上以全速执行。
    ————————

    2022年7月27日
    8
  • 面试的最后环节,面试官往往会问“你还有什么问题吗?”这时说些什么才能给面试加分?…

    面试的最后环节,面试官往往会问“你还有什么问题吗?”这时说些什么才能给面试加分?…

    2022年2月13日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号