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

时间:2019-12-06 16:00:43

标签: spring-security thymeleaf spring-el

我正在使用以下方法遍历模型属性:

<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列表。在每个项目上(目前)。我还验证了清单上每个项目的权利,并且在春季安全性上下文中分配的权利是相同的授权。

我还尝试了以下方法:

${#authorization.expression('hasAnyAuthority(__${item.entitlements}__)')}

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

我正在使用Spring Boot 2.1.8.RELEASE和以下百里香云春天安全性依赖项:

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

最终是3.0.4.RELEASE版本

1 个答案:

答案 0 :(得分:0)

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