Spring Security 拦截 URL 究竟是如何工作的?
Posted
技术标签:
【中文标题】Spring Security 拦截 URL 究竟是如何工作的?【英文标题】:How exactly works the Spring Security intercept-url's? 【发布时间】:2015-06-10 02:55:15 【问题描述】:我正在学习 Spring Security,我发现在理解 intercept-url's 概念和回答我在学习资料中找到的这个问题时遇到了一些困难: p>
你必须按什么顺序编写多个拦截网址?
所以,在我的学习资料中,我找到了这个实际的例子:
<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>
并规定:
拦截网址按列出的顺序进行评估:使用第一个匹配项, 把特定的匹配放在第一位。
但究竟意味着什么?
所以我知道 security 命名空间的 intercept-url's 用于定义要保护的 URL(如果我断言错误,请纠正我)。
因此,在前面的示例中,这些 URL 是安全的:
/accounts/编辑* /accounts/account* /accounts/** /customers/**但是,以下访问角色的具体代表是什么?
例如,/accounts/edit* URL 被指定为 access="ROLE_ADMIN"
对于 /accounts/account* URL 指定 access="ROLE_ADMIN,ROLE_USER"
等等。究竟是什么意思?我认为这意味着,但我绝对不确定,如果用户尝试访问 /accounts/edit* 它必须是管理员而不是如果他尝试访问 /accounts/account* 可以是管理员,也可以是普通用户。
这种解释是正确的还是不正确的?
如果正确,如何指定用户“属于”ROLE_ADMIN 还是ROLE_USER?究竟代表什么,在哪里定义?
拦截网址按列出的顺序进行评估究竟意味着什么:使用第一个匹配项,首先放置特定匹配项?
【问题讨论】:
角色本身是由您定义的——您可以创建任意数量的角色,并且可以给他们任何您想要的名称。然后,您可以指定每个角色可以做什么或不能做什么。关于“拦截网址按列出的顺序进行评估:使用第一个匹配项,首先放置特定匹配项?”,我真的不确定它应该是什么意思:) 【参考方案1】:您可以任意定义角色,并根据需要为每个角色设置权限访问。
拦截网址需要从最具体到最不具体列出,因为如果你把最不具体的一个放在第一位,像这样:
pattern="/foo/bar/**" 模式="/foo/bar/baz*"
当有人导航到 /foo/bar/baz 时,将应用 /foo/bar 的权限设置,因为它在拦截 URL 列表中首先匹配。这需要开发人员付出更多的努力,但它比在列表中的每个 URL 上匹配确切的字符串要快。希望这会有所帮助。
【讨论】:
好的,你对我说当我做某事时:以上是关于Spring Security 拦截 URL 究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 拦截 URL 究竟是如何工作的?
250.Spring Boot+Spring Security:基于URL动态权限:自定义AccssDesionManager