如何使用Spring Security标签和JSTL设置多个逻辑

时间:2019-01-09 13:38:10

标签: spring-security jstl

我的视图中有一个侧边栏设置图标,即时通讯对此有此要求。用户可以具有“ ROLE_MANAGE_SYSTEM_USER”权限或“ ROLE_MANAGE_USER_ROLE”权限,或两者都有。

  1. 如果用户具有“ ROLE_MANAGE_SYSTEM_USER”或“ ROLE_MANAGE_USER_ROLE”权限,则应显示设置图标。

  2. 如果用户同时拥有两个权限,则必须将其定向到URL映射('/ setting / systemUser / load')

  3. 如果用户仅具有“ ROLE_MANAGE_SYSTEM_USER”权限,则必须将其定向到URL映射(“ / setting / systemUser / load”)

  4. 如果用户仅具有“ ROLE_MANAGE_USER_ROLE”权限,则必须将其定向到URL映射(“ / setting / systemRole / load”)

为了实现这一点,我将代码结构如下:

    <sec:authorize access="hasAnyRole('ROLE_MANAGE_SYSTEM_USER', 'ROLE_MANAGE_USER_ROLE')" var="anyrole">

            <c:choose>
                <c:when test="${anyrole}">
                    <a href="<c:url value="/setting/systemUser/load"/>">
                        <p><i class="icon ion-settings"></i></p>Settings
                    </a>
                </c:when>
                <c:otherwise>
                    <a href="<c:url value="/setting/systemRole/load"/>">
                        <p><i class="icon ion-settings"></i></p>Settings
                    </a>
                </c:otherwise>
            </c:choose>
      </sec:authorize>

我发现很难用现有的JSTL和spring安全标签库知识来实现​​此逻辑。任何支持将不胜感激。

1 个答案:

答案 0 :(得分:0)

可以从每个检查每个权限的语句中删除两个变量来满足此要求。参见以下代码:

     <li class="${param.activeTab eq 'settings' ? 'active' : ''}">
       <sec:authorize access="hasRole('ROLE_MANAGE_SYSTEM_USER')" var="isUser"/>
        <sec:authorize access="hasRole('ROLE_MANAGE_USER_ROLE')" var="isRole"/>
        <c:choose>
            <c:when test="${isUser}">
                <a href="<c:url value="/setting/systemUser/load"/>">
                    <p><i class="icon ion-settings"></i></p>Settings
                </a>
            </c:when>
            <c:when test="${isRole}">
                <a href="<c:url value="/setting/systemRole/load"/>">
                    <p><i class="icon ion-settings"></i></p>Settings
                </a>
            </c:when>
           <c:otherwise>
          </c:otherwise>
        </c:choose>
    </li>