Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >spring security filter获取请求的urlpattern

spring security filter获取请求的urlpattern

作者头像
code4it
发布于 2018-09-17 07:29:20
发布于 2018-09-17 07:29:20
1.5K00
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要讲一下如何在spring security filter里头获取请求的HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE

BEST_MATCHING_PATTERN_ATTRIBUTE

spring mvc支持在url配置变量,这个比较容易满足rest风格的api设计,但是也给鉴权、监控统计等带来一些麻烦,那就是原来光靠uri来进行判断已经不行了,必须改造使用url pattern来判断。

BEST_MATCHING_PATTERN_ATTRIBUTE的设置是在spring mvc的dispatch servlet里头,但是spring security的filter执行顺序在mvc之前,因而在spring security里头的filter无法获取BEST_MATCHING_PATTERN_ATTRIBUTE

那么在这种情况下,如何自己获取呢

RequestMappingHandlerMapping#getHandler

答案就是从RequestMappingHandlerMapping入手,获取handler,即调用这个方法handlerMapping.getHandler((HttpServletRequest) servletRequest); 它就提前触发计算BEST_MATCHING_PATTERN_ATTRIBUTE,之后就可以正常从attrivute中取了。

实现实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HandlerExecutionChain chain = handlerMapping.getHandler((HttpServletRequest) servletRequest);
String urlPattern = servletRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);

计算BEST_MATCHING_PATTERN_ATTRIBUTE的核心逻辑在handlerMapping.getHandler(HttpServletRequest)这个方法里头,至于源码是如何,后续专门写一篇来讲。 这样就大功告成了。

doc

  • Actuator metrics: Path vars not recognized e.g. if spring security check fails - number of metrics explode #4377
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
URL 解析与鉴权中的陷阱 —— Spring 篇
在上一篇文章中介绍了 Java Web 应用中 URL 解析与鉴权认证中的常见陷阱,但主要针对 Servlet 容器进行分析。前文末尾也提到了,当前 Web 应用多是使用 Spring 全家桶进行开发,其路由匹配方式又与传统 Web 容器有所差异,因此本文就对其进行分析。
evilpan
2023/10/17
1.4K0
URL 解析与鉴权中的陷阱 —— Spring 篇
Spring MVC介绍(一)之 Spring MVC体系结构与执行流程
Spring MVC是Spring的一个模块,包含Web MVC、Framework,Web Views,JSP等等。 其中MVC分别对应:Model,View,Controller,本质上SpirngMVC还是使用Servlet进行处理,并在其基础上进行了封装,简化了开发流程,提高易用性,并使得逻辑结构变得非常清晰。
zoro
2019/04/11
8660
Spring MVC介绍(一)之 Spring MVC体系结构与执行流程
spring mvc如何计算BEST_MATCHING_PATTERN_ATTRIBUTE
spring-webmvc-4.3.10.RELEASE-sources.jar!/org/springframework/web/servlet/DispatcherServlet.java
code4it
2018/09/17
8090
Spring MVC RequestMapping 原理
SpringMVC 启动的时候,会加载 加了注解 @Controller 的 Bean.
王小明_HIT
2020/11/03
1.2K0
Spring MVC  RequestMapping 原理
CORS跨域资源共享(三):@CrossOrigin/CorsFilter处理跨域请求示例,原理分析【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/25
17K0
CORS跨域资源共享(三):@CrossOrigin/CorsFilter处理跨域请求示例,原理分析【享学Spring MVC】
【小家Spring】Spring MVC容器的web九大组件之---HandlerMapping源码详解(一)---BeanNameUrlHandlerMapping系列
在这篇文章里: 【小家Spring】Spring MVC容器启动时,web九大组件初始化详解(Spring MVC的运行机制) 已经大概介绍过web九大组件,本文将聚焦于Spring MVC中最重要的一个组件:HandlerMapping展开讨论
YourBatman
2019/09/03
1.4K0
【小家Spring】Spring MVC容器的web九大组件之---HandlerMapping源码详解(一)---BeanNameUrlHandlerMapping系列
Spring学习笔记(5)一SpringMVC处理请求原理
我们开发springmvc 的web,主要代码就是controller,使用《Spring学习笔记(3)一SpringMVC快速入门》例子:
黄规速
2022/04/14
5380
Spring学习笔记(5)一SpringMVC处理请求原理
探究SpringWeb对于请求的处理过程
在路径归一化被提出后,越来越多的未授权漏洞被爆出,而这些未授权多半跟spring自身对路由分发的处理机制有关。今天就来探究一下到底spring处理了什么导致了才导致鉴权被绕过这样严重的问题。
红队蓝军
2023/09/13
2460
探究SpringWeb对于请求的处理过程
一文读懂Spring MVC执行流程
说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会
说故事的五公子
2019/10/24
1.7K0
java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(上)源码执行流程
  做过web项目的小伙伴,对于SpringMVC,Struts2都是在熟悉不过了,再就是我们比较古老的servlet,我们先来复习一下我们的servlet生命周期。
小菜的不能再菜
2019/10/08
7320
java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(上)源码执行流程
Spring MVC更多家族成员---框架内处理流程拦截与HandlerInterceptor---08
前面已经讲述了,HandlerMapping返回的用于处理具体Web请求的Handler对象,是通过一个HandlerExecutionChain对象进行封装的(这在HandlerMapping的接口定义上可以看出来)。
大忽悠爱学习
2022/08/23
5380
Spring MVC更多家族成员---框架内处理流程拦截与HandlerInterceptor---08
springboot之mvc原理(一)-请求处理
springboot出现以后,我们搭建spring应用的复杂度大大降低,仅仅需要简单的注解和若干配置类就能构建简单的应用,这些都依赖于springboot默认集成了一整套的spring核心组件,比如在新版本的springboot的中,web和aop能力是完全不用配置和注解开始就能直接使用,这也是springboot设计和存在的初衷,尽可能大的程度上降低spring应用搭建和配置成本,将研发人员的主要精力尽可能投入在业务开发中。
叔牙
2020/11/19
2.9K0
springboot之mvc原理(一)-请求处理
Spring MVC介绍(二)之 Spring MVC 执行流程解析
此时启动容器,访问 http://localhost:8080/spring_mvc/beanName ,可以看到显示的是我们control返回的数据。
zoro
2019/04/11
5140
Spring MVC介绍(二)之 Spring MVC 执行流程解析
Spring MVC注解Controller源码流程解析--定位HandlerMethod
上一篇中,我们对映射建立的过程做了详细的分析,既然映射关系已经建立完毕了,那么下面就是当请求来临时,如何通过请求去映射集合中寻找出对应的HandlerMethod,然后再交给RequestMappingHandlerAdapter完成请求最终处理。
大忽悠爱学习
2022/09/28
8520
Spring MVC注解Controller源码流程解析--定位HandlerMethod
SpringMVC 解毒2
在第2章,DipatcherServlet中使用 HandlerMapping 得到执行链HandlerExecutionChain,然后就再也没有 HandlerMapping 的事了。也就是说SpringMVC就是靠 HandlerMapping 通过入参 HttpServletRequest 判断应该调用哪个方法、或者返回哪个文件,所以就让我们从这里入手。
zhangheng
2020/04/29
8120
SpringMVC 解毒2
嗨,CRUD BOY们,是时候掌握Spring MVC的处理流程了
Spring MVC是一款构建于Servlet API之上、基于同步阻塞I/O模型的主流Java Web开发框架,这种I/O模型意味着一个Http请求对应一个线程,即每一个Http请求都是在各自线程上下文中完成处理的;此外,Spring 5.0提供了一款基于异步非阻塞I/O模型的Java Web开发框架,即Spring WebFlux;大家不用纠结Spring官方会不会在将来的某个时间点将Spring MVC置为废弃(deprecated)态,至少目前来看,Spring MVC依然是流行的,在Spring官网关于Reactive的介绍中有一张图相当精致,与大家分享:
程序猿杜小头
2022/12/01
4500
嗨,CRUD BOY们,是时候掌握Spring MVC的处理流程了
SpringMVC DispatcherServlet执行流程及源码分析你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里
你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要根据源码讲解SpringMVC的启动过程,以及相关重要组件的源码分析。阅读此系列文章需要具备Spring以及SpringMVC相关知识。本文将分以下几篇文章进行讲解,读者可按需查阅。 SpringMVC 启动流程及相关源码分析 SpringMVC DispatcherServlet执行流程及
WWWWDotPNG
2018/04/10
2.2K0
SpringMVC DispatcherServlet执行流程及源码分析你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里
【小家Spring】Spring MVC执行流程 FrameworkServlet、DispatcherServlet源码分析(processRequest、doDispatch)
本篇博文会更偏向于应用、更加宏观一些。 但是,本人还是建议,在了解Spring MVC的执行流程之前,先参阅这两篇博文: 【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注解驱动,和ContextLoader源码分析) 【小家Spring】Spring MVC初始化(容器启动)时,Spring MVC九大组件初始化详解(Spring MVC的运行机制) 这样会有助于你更好的了解本文的一个流程,毕竟既会宏观的从步骤上去讲解,也会稍微微观(注意是稍微)的从源码角度去分析一下子
YourBatman
2019/09/03
1.3K0
【小家Spring】Spring MVC执行流程 FrameworkServlet、DispatcherServlet源码分析(processRequest、doDispatch)
Spring源码解析之Spring MVC
下面我们对Spring MVC框架代码进行分析,对于webApplicationContext的相关分析可以参见以前的文档,我们这里着重分析Spring Web MVC 框架的实现.我们从分析 DispatcherServlet 入手:
I Teach You 我教你
2023/07/18
2750
这一次搞懂SpringMVC原理
前面几篇文章,学习了Spring IOC、Bean实例化过程、AOP、事务的源码和设计思想,了解了Spring的整体运行流程,但如果是web开发,那么必不可少的还有Spring MVC,本篇主要分析在请求调用过程中SpringMVC的实现原理,通过本篇要搞懂它是怎么解决请求、参数、返回值映射等问题的。
夜勿语
2020/09/07
3670
推荐阅读
相关推荐
URL 解析与鉴权中的陷阱 —— Spring 篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验