Spring Security intercept-url的运作方式究竟如何?

时间:2015-04-05 15:32:26

标签: java spring spring-mvc spring-security

我正在学习 Spring Security ,我发现在理解拦截网址概念时遇到了一些困难,并回答了我在学习中发现的问题材料:

  

您必须以哪种顺序编写多个intercept-url?

所以,在我的学习资料中,我找到了这个实际的例子:

<beans>
    <security:http>
        <security:intercept-url pattern="/accounts/edit*"
access="ROLE_ADMIN" />
        <security:intercept-url pattern="/accounts/account*"
access="ROLE_ADMIN,ROLE_USER" />
        <security:intercept-url pattern="/accounts/**"
access="IS_AUTHENTICATED_FULLY" />
        <security:intercept-url pattern="/customers/**"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
    </security:http>
</beans>

并指定:

  按列出的顺序评估

intercept-urls:使用第一个匹配,   首先是特定的匹配。

但是,这意味着什么呢?

所以我知道安全命名空间的 intercept-url 用于定义要保护的URL(如果我断言错误,请更正我)的东西)。

所以在前面的例子中保护了这些URL:

  • /账户/编辑*
  • /帐户/帐户*
  • /帐户/ **
  • /客户/ **

但是,什么可以代表以下访问角色?

例如, / accounts / edit * 指定了访问=&#34; ROLE_ADMIN&#34;

对于 / accounts / account * ,指定了访问=&#34; ROLE_ADMIN,ROLE_USER&#34;

等等。究竟意味着什么?我认为这意味着,但我绝对不确定,如果用户尝试访问 / accounts / edit * ,如果他尝试访问<,则必须是管理员。 strong> / accounts / account * 它可以是管理员,也可以是普通用户。

这种解释是正确的还是不正确?

如果它是正确的,我如何指定用户是否属于&#34; ROLE_ADMIN ROLE_USER ?究竟代表什么,它在哪里定义?

究竟是什么意思拦截网址按照列出的顺序进行评估:首先使用匹配,先将特定匹配

1 个答案:

答案 0 :(得分:1)

您可以随意定义角色,并根据需要为每个角色设置权限访问权限。

拦截网址需要从大多数到最不具体列出,因为如果你把最不具体的网址放在首位,就像这样:

图案=&#34; /富/酒吧/ **&#34; 图案=&#34; /富/酒吧/巴兹*&#34;

当有人导航到/ foo / bar / baz时,/ foo / bar的权限设置将被应用,因为它在拦截URL列表中首先匹配。这需要开发人员付出更多努力,但它比在列表中的每个URL上匹配确切的字符串要快。希望这会有所帮助。