spring mvc拦截器_Spring MVC拦截器示例

spring mvc拦截器

我认为现在是时候看看Spring的MVC拦截器机制了,这种机制已经存在了很多年,并且是一个非常有用的工具。

Spring Interceptor会按照提示说:在传入的HTTP请求到达您的Spring MVC控制器类之前对其进行拦截,或者相反,在它离开控制器之后但在将其反馈给浏览器之前,截取该发出的HTTP响应。

您可能会问这对您有什么用? 答案是,它允许您执行每个请求或一组请求通用的任务,而无需将“ n”粘贴样板代码切成每个控制器类。 例如,您可以在请求到达控制器之前执行用户身份验证,如果成功,则从数据库中检索一些其他用户详细信息,然后在调用控制器之前将其添加到HttpServletRequest对象。 然后,您的控制器可以简单地检索和使用这些值,或者将其留给JSP显示。 另一方面,如果身份验证失败,则可以将用户重定向到其他页面。

演示代码向您展示如何在传入的HttpServletRequest对象到达您的控制器之前对其进行修改。 这无非是向请求中添加一个简单的字符串,但是,正如我上面所说,您始终可以进行数据库调用以获取每个请求所需的一些数据……您甚至可以添加某种优化并做一些此时进行缓存。

public class RequestInitializeInterceptor extends HandlerInterceptorAdapter {// Obtain a suitable logger.private static Log logger = LogFactory.getLog(RequestInitializeInterceptor.class);/*** In this case intercept the request BEFORE it reaches the controller*/@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {try {logger.info("Intercepting: " + request.getRequestURI());// Do some changes to the incoming request objectupdateRequest(request);return true;} catch (SystemException e) {logger.info("request update failed");return false;}}/*** The data added to the request would most likely come from a database*/private void updateRequest(HttpServletRequest request) {logger.info("Updating request object");request.setAttribute("commonData","This string is required in every request");}/** This could be any exception */private class SystemException extends RuntimeException {private static final long serialVersionUID = 1L;// Blank}
}

在上面的代码中,我通过扩展HandlerInterceptorAdaptor类(覆盖preHandle(..)方法)选择了最简单的实现方法。 我的preHandle(...)方法执行错误处理,确定发生错误时的处理方式,如果发生错误则返回false。 返回false时,拦截器链会断开,并且不会调用您的控制器类。 处理请求对象的实际工作被委托给updateRequest(request)。

HandlerInterceptorAdaptor类具有三个方法,每个方法都被存根,如果需要,可以忽略。 这些方法是:prehandle(...),postHandle(...)和afterCompletion(...),有关这些的更多信息可以在Spring API文档中找到 。 请注意,这可能有些令人困惑,因为Handler Interceptor类文档仍通过其Spring 2处理程序名称引用MVC控制器类。 如果您查看prehandle(…)的Object类型的第三个参数(称为处理程序),就很容易说明这一点。 如果在调试器中进行检查,您将看到它是控制器类的实例。 如果您不熟悉这项技术,请记住该控制器==处理程序。

与往常一样,实现拦截器的下一步是向Spring XML配置文件中添加一些内容:

<!-- Configures Handler Interceptors --> 
<mvc:interceptors>  <!-- This bit of XML will intercept all URLs - which is what you want in a web app --><bean class="marin.interceptor.RequestInitializeInterceptor" /><!-- This bit of XML will apply certain URLs to certain interceptors --><!-- <mvc:interceptor><mvc:mapping path="/gb/shop/**"/><bean class="marin.interceptor.RequestInitializeInterceptor" /></mvc:interceptor>-->
</mvc:interceptors>

上面的XML演示了向所有请求URL添加拦截器的一种或一种选择,或者,如果您查看注释掉的部分,则向特定的请求URL添加拦截器,从而允许您选择将哪些URL连接到您的拦截器类。

鹰眼的读者可能已经注意到,拦截器类使用继承和XML配置作为其实现方法。 在配置方面的常规情况下,这种模式看起来有些疲惫,并且可能需要进行大修。 一种建议是使用已添加到控制器机制中的相同技术来增强整体以使用注释。 这将增加额外的灵活性,而不会导致使用所有接口和抽象基类复杂化。 作为建议,将来的拦截器类实现可能如下所示:

@Intercept(value = "/gb/en/*", method = RequestMethod.POST)public boolean myAuthenticationHandler(HttpServletRequest request,Model model) {// Put some code here}

这样就结束了对Spring拦截器的研究,应该记住,我只是展示了最基本的实现。

参考:来自Captain Debug博客的 JCG合作伙伴 Roger Hughes在MVC Webapp中使用Spring Interceptor 。

相关文章 :
  • jqGrid,REST,AJAX和Spring MVC集成
  • SpringMVC 3 Tiles 2.2.2集成教程
  • Spring MVC3 Hibernate CRUD示例应用程序
  • Spring MVC开发–快速教程
  • Spring,Quartz和JavaMail集成教程
  • Spring Insight – Web应用程序分析
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/spring-mvc-interceptors-example.html

spring mvc拦截器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fastjson漏洞

Fastjson概述 Fastjson是阿里巴巴公司开源的一款json解析器&#xff0c;它可以解析 JSON 格式的字符串&#xff0c;支持将 Java Bean 序列化为 JSON 字符串&#xff0c;也可以从 JSON 字符串反序列化到JavaBean。 ➢历史漏洞 Fastjson <1.2.24 反序列化远程命令执行漏洞 Fa…

我是如何用Jquery实现网页缩小放大的

背景:一个比较老的后台系统,客户想操作父窗口的内容,同时查看子窗口,这就需要对页面进行缩小和放大,刚开始领导让我做一个假的隐藏然后缩放,经过测试此法不通,因为这个项目很庞大,框架较老,还有蒙版,使用隐藏hide()属性隐藏后,这个网页就不见了,在N个另一个页面加s…

浅谈哈希表

1. 引言 哈希表&#xff08;Hash Table&#xff09;的应用近两年才在NOI中出现&#xff0c;作为一种高效的数据结构&#xff0c;它正在竞赛中发挥着越来越重要的作用。 哈希表最大的优点&#xff0c;就是把数据的存储和查找消耗的时间大大降低&#xff0c;几乎可以看 成是常数时…

什么是分配率?

诸如“不可持续的分配率”和“您需要保持较低的分配率”等短语似乎仅属于Java Champions的词汇表。 复杂&#xff0c;恐怖并被魔术光环包围。 经常发生的情况是&#xff0c;当您更仔细地查看概念时&#xff0c;魔术会随着抽烟消失。 这篇文章试图从提到的条款中删除魔术。 什…

流量分析----CTF题

文章目录 题目背景一、关卡列表二、解题1. 请分析流量&#xff0c;给出黑客使用的扫描器2. 请分析流量&#xff0c;得到黑客扫描到的登陆后台是(相对路径即可)3. 请分析流量&#xff0c;得到黑客使用了什么账号密码登陆了web后台(形式:username/password)4. 请分析流量&#x…

一文教你从零开始设计并实现一个Java扫雷游戏

背景&#xff1a;扫雷这款游戏有着很长的历史&#xff0c;从扫雷被开发出来到现在进行了无数次的优化&#xff0c;这款游戏变得越来越让人爱不释手了&#xff0c;简单的玩法在加上一个好看的游戏界面&#xff0c;每一处的细节都体现了扫雷的魅力。以JAVA语言作为开发环境&#…

C#循环语句(for循环)

循环语句 for(初始条件&#xff1b;循环条件&#xff1b;状态改变) { 循环体 &#xff1b;执行代码&#xff08;break跳出循环体&#xff09; } for(i1&#xff1b;i<100;i) 初始条件是i1;循环条件是i<100,即直到i在1-100之内进行循环&#xff0c;直到100结束循环&#x…

Apache Shiro 认证绕过漏洞 CVE-2020-1957 漏洞复现

Apache Shiro 认证绕过漏洞 CVE-2020-1957 漏洞复现 一、漏洞描述二、漏洞影响三、漏洞复现1、环境搭建2、漏洞复现 四、漏洞POC五、参考链接 一、漏洞描述 Apache Shiro 是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff…

H5工程师在谷歌浏览器调试并开发原生APP项目的解决办法

背景:项目是前后端分离,我想在浏览器调试项目,工具使用HB-X。密码是不可输入状态。 1.login.html在HB-X中运行到谷歌浏览器页面 。按F12进入调试模式。 2.密码做了安全防御,不能直接输入,我们在控制台进入。定位到password的id。

在NSUserDefaults中存储自定义类型的数据

将自定义的类的数据以数组的形式直接存储到NSUserDefaults中会报错&#xff0c;需要进行转换&#xff0c;且需要将该类实现NSCoding协议。 e.g. 存储过程 NSMutableArray *archiveArr [NSMutableArray arrayWithCapacity:self.STNArrayList.count];for (STNArrayList *singleL…

「Java代码审计」华夏ERP3.0代码审计

本文转载于&#xff1a;https://blog.csdn.net/Ananas_Orangey/article/details/120340010?ops_request_misc%257B%2522request%255Fid%2522%253A%2522166565951516782427492557%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id166…

vue路由的钩子函数有哪些?都做了哪些事情?

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有: 嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、查询、通配符基于 Vue.js 过渡系统的视图过渡效果细粒度的导航控制带有自动激活的 CSS class 的…

api中重载函数的原理_小心重载API方法

api中重载函数的原理重载方法是API设计中的一个重要概念&#xff0c;尤其是当您的API是流利的API或DSL&#xff08; 特定于域的语言 &#xff09;时。 对于jOOQ就是这种情况&#xff0c;在这种情况下&#xff0c;您经常想使用与完全相同的方法名称来与库进行各种交互。 示例&a…

自动计算高度的方法 iOS, height为0, 可以自动计算weith,

height为0, 可以自动计算weith; weith为0, 可以自动计算height, 两者不可以同时为0 NSDictionary *dic {NSFontAttributeName: [UIFont systemFontOfSize:17]}; CGRect rect [joke.content boundingRectWithSize:CGSizeMake(375 - 20, 0) options:(NSStringDrawingUsesFontLe…

Fastjson 1.2.22-24 反序列化漏洞分析

Fastjson 1.2.22-24 FastJson在 1.2.22 - 1.2.24 版本中存在反序列化漏洞&#xff0c;主要原因FastJson支持的两个特性&#xff1a; fastjson反序列化时&#xff0c;JSON字符串中的 type 字段&#xff0c;用来表明指定反序列化的目标恶意对象类。 fastjson反序列化时&#xf…

new操作符具体都干了什么?一次笔试题遇到的

背景&#xff1a;一个笔试题简答谈到new操作符都干了什么&#xff1f;连续两次遇到&#xff0c;总结一下&#xff0c;不然不会的还是不会 new 共经过了4个阶段:1.创建一个空对象 let obj new Object();2.链接到原型 把 obj 的proto 指向构造函数Func的原型对象 prototype&am…

检测到堆栈粉碎

我敢打赌&#xff0c;每一个Java开发人员在他们的职业生涯初期都首次在Java代码中遇到本机方法时都会感到惊讶。 我还可以肯定&#xff0c;多年来随着了解JVM如何通过JNI处理对本机实现的调用而使惊喜消失了。 这篇文章是关于本机方法的最新经验。 更详细地讲&#xff0c;使用…

关于mysql中外键关联的一些个人理解

在我看来hibernate最麻烦的一件事就是配置外键关联&#xff0c;稍微不慎就会出现配置错误的情况&#xff0c;现在的项目全部都是在使用mybaits&#xff0c;而mybaits使用就简单的多&#xff0c;起码虽然说是要自己写mysql语句&#xff0c;但是起码这种做法在现阶段的项目开发中…

fastjson反序列化分析

1.fastjson简单使用 User: package com.naihe;public class User {private String name;private int age;public User() {}public User(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {th…

防抖函数的实现

防抖函数的定义是当事件触发完成之后再延迟触发&#xff0c;并且只触发一次&#xff1b;如果在触发完成之前再次触发&#xff0c;则会再次刷新延迟&#xff1b;简单理解为&#xff08;如果事件不触发即不执行&#xff0c;并且只会执行一次&#xff0c;就是定时器最后走的那一次…