Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring.eleaf lists.contains无法正常工作_Spring_Spring Security_Thymeleaf - Fatal编程技术网

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

打印出[角色\管理员、角色\超级管理员、角色\用户]

打印出真实的


打印出false

RoleList是授予权限的列表

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>