我正在学习 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 ?究竟代表什么,它在哪里定义?
究竟是什么意思拦截网址按照列出的顺序进行评估:首先使用匹配,先将特定匹配?
答案 0 :(得分:1)
您可以随意定义角色,并根据需要为每个角色设置权限访问权限。
拦截网址需要从大多数到最不具体列出,因为如果你把最不具体的网址放在首位,就像这样:
图案=&#34; /富/酒吧/ **&#34; 图案=&#34; /富/酒吧/巴兹*&#34;
当有人导航到/ foo / bar / baz时,/ foo / bar的权限设置将被应用,因为它在拦截URL列表中首先匹配。这需要开发人员付出更多努力,但它比在列表中的每个URL上匹配确切的字符串要快。希望这会有所帮助。