Spring.eleaf lists.contains无法正常工作
我的最终目标是用当前用户没有的角色填充下拉列表Spring.eleaf lists.contains无法正常工作,spring,spring-security,thymeleaf,Spring,Spring Security,Thymeleaf,我的最终目标是用当前用户没有的角色填充下拉列表 <p th:text="${#bools.listIsTrue(Item.granted_authorities)}"></p> 打印出[真的,真的,真的] 打印出[Ljava.lang.Object;@63a6ff07 打印出[角色\管理员、角色\超级管理员、角色\用户] 打印出真实的 打印出falseRoleList是授予权限的列表 contains始终返回false,因为GrantedAuthority对象永远不等于
<p th:text="${#bools.listIsTrue(Item.granted_authorities)}"></p>
打印出[真的,真的,真的]
打印出[Ljava.lang.Object;@63a6ff07
打印出[角色\管理员、角色\超级管理员、角色\用户]
打印出真实的
打印出falseRoleList是授予权限的列表 contains始终返回false,因为GrantedAuthority对象永远不等于字符串 要填充下拉列表,可以使用此代码,但需要在模型中添加可用权限,然后才能:
<select>
<option
th:each="r : ${availableAuthorities}"
th:value="${r.authority}"
th:text="${r.authority}">
</option>
</select>
结果:使用唯一选项角色\u ADM的select必须将用户角色转换为字符串
<select class="form-control form-big-letters" th:field="*{AllRoles}">
<option th:each="itemRole, iStat : ${AllRoles}"
th:if="${not #strings.contains(#strings.toString(#lists.toList(activeSessionsItem.granted_authorities)),#strings.toString(itemRole.role_list_role))}" th:value="${itemRole.role_list_role}" th:text="${#strings.substringAfter(itemRole.role_list_role,'ROLE_')}">Roles
</option></select>
我猜你的角色列表是一个授权权限列表,不是字符串吗?通过所有用户的会话注册表填充的对象userSettings.setgrated\u authorities用户principal\u item.getAuthorities.toArray;你的角色列表不包含任何字符串,因此lists.contains将失败。谢谢你的快速响应。这不适用于在这种情况下,考虑创建一个服务来为您做它,并使用@ BeNeNAM.方法…语法。因此,在您看来,没有办法添加TH:I==${0}。
<div th:with="RoleList=${#lists.toList(activeSessionsItem.granted_authorities)}">
<p th:text="${#lists.contains(RoleList, RoleList[0])}"></p>
</div>
<div th:with="RoleList=${#lists.toList(activeSessionsItem.granted_authorities)}">
<p th:text="${#lists.contains(RoleList, 'ROLE_USER')}"></p>
</div>
<select>
<option
th:each="r : ${availableAuthorities}"
th:value="${r.authority}"
th:text="${r.authority}">
</option>
</select>
<select th:with="myAuthoritiesList=${myAuthorities}" >
<option
th:each="r : ${allAuthorities}"
th:if="${not #lists.contains(myAuthoritiesList, r)}"
th:value="${r.authority}"
th:text="${r.authority}">
</option>
</select>
@RequestMapping("/home")
public String home(Model m) {
GrantedAuthority authAdmin = new SimpleGrantedAuthority("ROLE_ADM");
GrantedAuthority authUser = new SimpleGrantedAuthority("ROLE_USR");
List<GrantedAuthority> allAuths = new ArrayList<>() ;
allAuths.add(authAdmin);
allAuths.add(authUser);
m.addAttribute("allAuthorities", allAuths);
List<GrantedAuthority> myAuths = new ArrayList<>() ;
myAuths.add(authUser);
m.addAttribute("myAuthorities", myAuths);
return "home";
}
<select class="form-control form-big-letters" th:field="*{AllRoles}">
<option th:each="itemRole, iStat : ${AllRoles}"
th:if="${not #strings.contains(#strings.toString(#lists.toList(activeSessionsItem.granted_authorities)),#strings.toString(itemRole.role_list_role))}" th:value="${itemRole.role_list_role}" th:text="${#strings.substringAfter(itemRole.role_list_role,'ROLE_')}">Roles
</option></select>