我想使用 Spring Security JSP 标签库根据角色有条件地显示一些内容。但是在 Spring Security 3.1.x 中只检查一个角色。
我可以使用,但不推荐使用 ifAllGranted 。
有什么帮助吗?
原文由 K. Siva Prasad Reddy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想使用 Spring Security JSP 标签库根据角色有条件地显示一些内容。但是在 Spring Security 3.1.x 中只检查一个角色。
我可以使用,但不推荐使用 ifAllGranted 。
有什么帮助吗?
原文由 K. Siva Prasad Reddy 发布,翻译遵循 CC BY-SA 4.0 许可协议
@dimas 的回答在逻辑上与你的问题不一致; ifAllGranted
不能直接替换为 hasAnyRole
。
老的:
<sec:authorize ifAllGranted="ROLE_ADMIN,ROLE_USER">
<p>Must have ROLE_ADMIN and ROLE_USER</p>
</sec:authorize>
新(SPeL):
<sec:authorize access="hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')">
<p>Must have ROLE_ADMIN and ROLE_USER</p>
</sec:authorize>
Replacing ifAllGranted
directly with hasAnyRole
will cause spring to evaluate the statement using an OR
instead of an AND
.也就是说, hasAnyRole
将返回 true
如果经过身份验证的主体 至少包含一个 指定的角色,而 Spring 的(自 Spring Security 4 起已弃用) ifAllGranted
方法仅返回 true
如果经过身份验证的主体包含 所有 指定的角色。
TL;DR :要使用 Spring Security Taglib 的新身份验证表达式语言复制 ifAllGranted
的行为,需要使用 hasRole('ROLE_1') and hasRole('ROLE_2')
模式。
原文由 acidnbass 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.6k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
spring security中有一个特殊的安全表达式:
我从未使用过它,但我认为这正是您要找的东西。
用法示例:
这是描述标准 spring 安全表达式 的参考文档的链接。另外,这是一个 讨论,我在其中描述了如何在需要时创建自定义表达式。