如何在 Spring Security thymeleaf sec 中使用列表:授权标签

Posted

技术标签:

【中文标题】如何在 Spring Security thymeleaf sec 中使用列表:授权标签【英文标题】:how to use a list within spring security thymeleaf sec:authorize tag 【发布时间】:2020-03-31 15:29:03 【问题描述】:

我正在使用以下方法循环模型属性:

<li class="nav-item" th:each="item : $navigation"
    sec:authorize='hasAnyAuthority("__$item.entitlements__")'><a
    class="nav-link" th:href="$item.url" th:text="$item.display"></a></li>

其中“item.entitlements”是一个包含一个元素的java List。在每个项目上(此时)。我还验证了该列表中每个项目的权利,并且在 spring 安全上下文中分配的权限是相同的。

我还尝试了以下方法:

$#authorization.expression('hasAnyAuthority(__$item.entitlements__)')

这可能吗?如果是这样,我错过了什么?我需要交换我的数据库以使用逗号分隔值的字符串吗?

我正在使用 spring boot 2.1.8.RELEASE 和以下 thymeleaf spring 安全依赖项:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

最终版本为 3.0.4.RELEASE

【问题讨论】:

【参考方案1】:

您可以使用 $#strings.listJoin(item.entitlements,',') 等 Thymeleaf 实用方法将 item.entitlements 转换为逗号分隔的字符串,然后在 hasAnyAuthority 中使用它

【讨论】:

以上是关于如何在 Spring Security thymeleaf sec 中使用列表:授权标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 获取之前捕获 Spring Security 登录表单?

如何在 Spring WebFlux Security(Reactive Spring Security)配置中将多个用户角色添加到单个 pathMatcher/Route?

如何在 spring-security 5.2 中增加 RemoteJWKSet 缓存 TTL

如何在 Spring Security 中将令牌转换为身份验证?

Spring Security:如何将两个应用程序与单独的 Spring Security 配置集成?

采用狂神页面和 SpringSecurity+MybatisPlus实现Web权限控制