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 上匹配确切的字符串要快。希望这会有所帮助。

【讨论】:

好的,你对我说当我做某事时: 这意味着 /accounts如果验证了该用户的 ROLE_ADMIN 角色,则该用户可以访问 /edit* 资源。但这是否意味着“ROLE_ADMIN”是角色的名称?如果是真的,你能告诉我一个如何定义角色的例子吗? Tnx 没错。可以在 security-config.xml 文件中指定用户的角色,并将访问限制直接添加到 JSP。 see example 您还可以使用 spring security 和不同的方式来设置用户角色。 This post,有一篇很好的推荐文章和作者的进一步反馈提供了更多的见解。祝你好运!

以上是关于Spring Security 拦截 URL 究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 拦截 URL 究竟是如何工作的?

Spring Security拦截后恢复用户名

如何让spring security不拦截第三方的对接方法

250.Spring Boot+Spring Security:基于URL动态权限:自定义AccssDesionManager

spring boot整合 spring security之授权访问

spring security 单一账户多地方登陆提醒, ajax 拦截器 Interceptor