java - 在RegexRequestMatcher中允许查询字符串

标签 java grails spring-security

我试图添加一个RegexRequestMatcher,它将查找具有特定url参数的url,并将请求重定向到自定义AuthenticationEntryPoint。但是,我很难匹配URL参数,因为它们似乎已从传入的HttpServletRequest中删除。经过一番重要的搜索后,听起来出于安全原因,Spring Security故意将这些请求从传入请求中过滤掉。

似乎有一个属性stripQueryStringFromUrls可以替代此行为,可以通过DefaultFilterInvocationSecurityMetadataSource类上的BeanPostProcessor设置此属性,但是从3.1版开始,此属性不再存在(在3.0.0版中,它似乎已移至FilterChainProxy,然后与下一个版本)。

默认情况下,spring security是否仍会删除查询字符串,或者配置属性的消失是该行为被删除的结果?如果仍然有效,从Spring Security 3.1开始如何启用url参数?

我正在通过grails spring安全插件(1.2.7)使用Spring Security 3.1.3。

最佳答案

在Spring安全性Web的3.0和3.1版本之间确实删除了stripQueryStringFromUrls。删除了全部功能,取而代之的是制作了RequestMatcher对象,以根据需要处理请求转换。可以在以下类DefaultFilterInvocationSecurityMetadataSource的commit diff中进行验证。
commit diff of the class DefaultFilterInvocationSecurityMetadataSource

而是更改了框架,以便使用 AntPathRequestMatcher 将导致查询字符串被忽略,而使用 RegexRequestMatcher 会将其考虑在内(并且使用自定义RequestMatcher可以执行选择的任何操作。

因此,上述实现应该可以使用。事实证明,实际的问题(在问题中没有发现)与用于测试Spring安全性的url本身有关。网址的正确顺序是

[网址库] + [查询参数] + [页面片段],例如本地主机/某物?param =任何东西#/等等

但我试图这样订购

[网址库] + [页面片段] + [查询参数] localhost / something#/ blah?param =什么

这导致查询参数与页面片段一起丢失。以正确的顺序完成操作后,spring security会正确地接收并解析请求。

关于java - 在RegexRequestMatcher中允许查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27369232/

相关文章:

java - Struts2-同一Action类中不同 Action 之间对象值的持久化

java - 如何在android studio中为另一个数组列表中的每个值创建一个数组列表

java - 检查该用户是否已存在于 struts2 中

grails - Grails创建标准的简单问题

使用 Spring Boot : Allowing unauthenticated user access on specific endpoints when using a filter 的 Spring Security

Spring Security 使用 X.509 身份验证并定期更新授权用户详细信息

java - Spring RESTful webservice Hibernate/JPA Crudrepository - 按电影标题获取用户

javascript - 带有闪烁器的Grails Flash消息

grails在hasmany上的位置搜索

spring-security - 如何获得 <http> 创建的 ExceptionTranslationFilter 的 BeanDefinition