在不带括号的HTML页面中显示用户角色

时间:2015-12-17 14:16:34

标签: javascript java html spring-security thymeleaf

我正在使用Spring安全性来验证我的网页中的用户。我想为每个用户展示他没有支架的角色。 如果我使用

<p sec:authentication='principal.authorities'></p>

我看到[ADMIN,USER]。 在thymeleaf,javascript或HTML中是否有一种方式只显示ADMIN,USER? 我知道在thymeleaf中有弹簧替换,但我怎么能传递上面代码的结果呢? 谢谢,问候

3 个答案:

答案 0 :(得分:3)

thymeleaf-extras-springsecurity提供对#authentication对象的访问权限,该对象可以返回GrantedAuthorities列表。分配的每个角色都有一个GrantedAuthority(前缀为&#39; ROLE _&#39;)。

您可以使用它来遍历并显示每个角色(删除ROLE_前缀):

    <p th:each="authority : ${#authentication.getAuthorities()}"
       th:if="${authority.getAuthority().startsWith('ROLE_')}"
       th:text="${authority.getAuthority().replaceFirst('ROLE_', '')}">
    </p>

答案 1 :(得分:0)

我认为你看到括号因为&#39; principal.authorities&#39;是一个数组。尝试使用jstl taglib。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:forEach var="item" items="principal.authorities">
   <c:out value="${item}"/>
</c:forEach>
...

答案 2 :(得分:0)

对不起,对此线程来说很晚,但这是使用Thymeleaf和Thymeleaf Extras

的有效解决方案
Role(s):
<th:block th:each="r, iter:${#authentication.getAuthorities()}">
    <span th:text="${r}"></span>
    <th:block th:if="${!iter.last}">, </th:block>
</th:block>

上面的代码将在最后一个角色之后添加逗号。