Java 允许在RegexRequestMatcher中使用查询字符串

Java 允许在RegexRequestMatcher中使用查询字符串,java,grails,spring-security,Java,Grails,Spring Security,我正在尝试添加一个RegexRequestMatcher,它将查找具有特定url参数的url,并将请求重定向到自定义AuthenticationEntryPoint。但是,我很难匹配url参数,因为它们似乎要从传入的HttpServletRequest中删除。经过一些重要的搜索之后,听起来像是出于安全原因,spring security故意从传入的请求中过滤掉这些内容 似乎有一个属性stripQueryStringFromUrls覆盖了此行为,可通过DefaultFilterInvocation

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

似乎有一个属性stripQueryStringFromUrls覆盖了此行为,可通过DefaultFilterInvocationSecurityMetadataSource类上的BeanPostProcessor进行设置,但是,从3.1开始,该属性在3.0.0中不再存在,它似乎已移动到FilterChainProxy,然后在下一版本中完全消失

spring安全性默认情况下仍然删除查询字符串,还是配置属性的消失是由于删除该行为造成的?如果仍然如此,您如何在SpringSecurity3.1中启用url参数


我通过GrailsSpringSecurity插件1.2.7使用SpringSecurity 3.1.3

spring security web的3.0版和3.1版之间确实删除了StripQueryStringfromURL。整个功能都被删除了,取而代之的是RequestMatcher对象被用来处理必要的请求转换。这可以在类DefaultFilterInvocationSecurityMetadataSource的以下提交差异中进行验证

相反,该框架已更改,因此使用AntPathRequestMatcher会导致忽略查询字符串,而使用RegexRequestMatcher会将其考虑在内,并且使用自定义RequestMatcher会执行您选择的任何操作

因此,上述实施本应奏效。事实证明,问题中不明显的实际问题是用于测试spring安全性的url本身。url的正确顺序是

[url base]+[query params]+[page fragment]例如localhost/something?param=whatever/blah

但我正试图这样订购

[url base]+[page fragment]+[query params]例如localhost/something/blah?param=whatever

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