Spring Security中带有查询参数的URL的regexMatcher

时间:2018-07-29 08:48:34

标签: spring spring-mvc spring-security

如何在Spring Security的regexMatcher中使用像这样的参数?我有许多以/sUrl开头且具有不同参数的URL。该代码无效!

.regexMatchers("\\/sUrl\\?params=\\{url:\"reports\\/Manager\",subSystem:\"ABS\"\\}").access("hasRole('ROLE_ABS')")

控制器:

@RequestMapping(value = "sUrl", method = RequestMethod.GET)
public RedirectView sUrl(@RequestParam(name = "params") String params) {
            RedirectView redirectView = new RedirectView();
        .
        .
        .
            return redirectView;
}

当我单击此链接时,在浏览器检查器的网络分区中看到的URL:

  

sUrl?params = {url:%22reports / Manager%22,subSystem:%22ABS%22}

1 个答案:

答案 0 :(得分:3)

您必须使用带有URL-encoded查询参数的正则表达式,请参见RegexRequestMatcher

  

使用正则表达式确定提供的> set PATH=%PATH%;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\ 的URL。也可以配置为匹配特定的HTTP方法。匹配是针对请求的HttpServletRequest + servletPath + pathInfo执行的,默认情况下区分大小写。可以使用带有queryString参数的构造函数来使用不区分大小写的匹配。

HttpServletRequest

  

在路径后返回请求URL中包含的查询字符串。如果URL没有查询字符串,则此方法返回caseInsensitive。与CGI变量QUERY_STRING的值相同。

     

返回:

     

包含查询字符串的null;如果URL不包含查询字符串,则为String。该值不会被容器解码。

您修改后的代码:

null