当前位置: 首页 > 知识库问答 >
问题:

Spring Security中截获URL模式的顺序

唐啸
2023-03-14

在appSecurity中。xml我有这个:

intercept-URL pattern = "/users/profile/* * " access = " has role(' VIEW _ PROFILES ')"。

intercept-URL pattern = "/users/profile/EDIT/* * " access = " has role(' EDIT _ PROFILES))"

我有一个页面 /users/profiles/edit/addnew,当角色VIEW_PROFILES的用户试图访问此页面时,他成功了,但访问角色EDIT_PROFILES的用户被阻止。

我做错了什么?

共有3个答案

黎阳冰
2023-03-14

请确保EDIT_PROFILES规则高于VIEW_PROFILES规则。如果您看一下VIEW_PROFILES的表达式,您会看到它包含了所有匹配EDIT_PROFILES的URL。这意味着如果VIEW_PROFILES规则是第一位的,那么spring security将不会尝试EDIT_PROFILES规则。

南宫浩皛
2023-03-14

John Farrelly和Ritesh都是对的。截获 URL 模式按列出的顺序匹配。找到匹配项后,将立即忽略指定的其余模式。这就是为什么您应该在前面列出更具体的模式。

在你的例子中,/users/profile/edit/somepage的模式与第一个截获网址模式中指定的模式相匹配,因此Spring会适当地检查有问题的用户是否具有指定的访问角色。显然,您的EDIT_PROFILES用户没有VIEW_PROFILES权限,因此他们被拒绝访问。同样,您打算将访问权限限制为 ../edit/ 给具有EDIT_PROFILES权限的用户正在被前面的声明所破坏,该声明将访问权限授予具有VIEW_PROFILES权限的用户。

切换顺序以便于修复,您可能希望为EDIT_PROFILES用户VIEW_PROFILES权限(除了EDIT_PROFILES权限之外)。然后,考虑使用 access=“hasAnyRole('REQUIRED_ROLE')” 而不是 access=“hasRole('REQUIRED_ROLE')”,以简化访问语句。

太叔睿
2023-03-14

由于“/users/profile/edit/””/users/profile/“”更具体,因此应将其放在列表的更高位置。

为什么?

模式总是按照其定义的顺序进行评估。因此,在列表中定义更具体的模式比定义更少的模式更重要。这反映在我们上面的示例中,其中更具体的/secure/super/模式似乎高于不太具体的/secure/模式。如果将它们反转,则/secure/模式将始终匹配,/secure/super/模式将永远不会被评估。

来源:核心安全过滤器

 类似资料:
  • 问题内容: 我有项目是IAM Spring Security 3.1.3和MVC 3.2 我也希望在路径中的用户标识中匹配主用户标识的URL http use-expressions将其设置为true,当尝试principal.userId == 1时可以使用,但是我需要使用从URL中提取的值。 我已经尝试了所有可能的组合。 问题答案: 这是不可能的。但是还有另一种方式。你可以定义自己的网络表达式

  • G-framework支持两种格式的URL模式,一个是普通模式,一个是PATHINFO模式,通过配置文件Config.php即可更改URL模式。 配置参数为:    //默认URL模式(1为原始模式,2为PATHINFO模式) 'url_model' => 1,

  • 我们知道如何为servlet设置url模式,但我无法在web中为html设置url模式。xml,你能帮我找到解决方案吗?我搜索了一下,但找不到,请在下面找到我的问题。 在上面的代码中,我正在为Web中的servlet类设置url模式.xml,就像明智的,我可以为web中的html文件设置url模式.xml请帮助找到解决方案,提前感谢您

  • 假设我已经定义了这些RESTendpoint: 我定义了两个过滤器(日志记录和授权),在这些过滤器中,我想获得与当前请求匹配的url模式。使用上述示例: 如果请求是一个GET到 /variables,我需要"/变量" 如果请求是一个GET到 /variables/myfancyname,我需要"/变量/{name}" 如果请求是一个PUT到 /variables/myfancyname/myval

  • 网络.xml 控制器 当我访问 http://mydomain/car/baojia.html 并出现此错误时: spring.xmlViewResolver 我在/views/boajia.jsp中有一个文件 不管我写什么,都不行 我还有另一个问题,我不想匹配这个 url 模式:/api/*,控制器是: 但它不能工作

  • 在符合J2EE web app 2.4版的web.xml中,可以在元素中包含多个元素吗,如下所示: 我从http://java.sun.com/xml/ns/j2ee/web-app_2_4.XSD中查找了XSD“web-app_2_4.XSD”文件,其定义如下所示: URL模式定义如下所示: 所以我认为,我们可以在元素中有多个元素。但是,我的Eclipse IDE似乎不同意我的观点,并且需要一个