尝试使用 Spring Security 授权用户时出错

问题描述 投票:0回答:2

尝试使用 Spring Security 阻止未经授权的用户(不是所有者也不是管理员)访问下拉菜单,传递“所有者”对象 - 当前查看列表的所有者:

<span sec:authorize="hasRole('ADMIN') or #authentication.principal.equals(#owner)">
    <form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
        <select class="form-control" name="user_id" id="users">
            <option>Select collaborator...</option>
            <option th:each="user : ${users}" th:value="${user.id}"
                    th:text="${user.firstName + ' ' + user.lastName}"></option>
        </select>
        <input align="right" class="btn btn" type="submit" value="Add">
    </form>
</span>

它适用于管理员,但拒绝显示非管理员所有者的列表

<h2 th:text="${owner.equals(#authentication.principal)}"></h2>

打印出真。我如何解决它?提前致谢,

java spring-security authorization thymeleaf
2个回答
0
投票

看起来问题与您如何比较代码中的两个对象有关:

owner
对象和
authentication.principal
对象。

您可以尝试使用 == 运算符,它比较对象引用而不是它们的值。

<span sec:authorize="hasRole('ADMIN') or #authentication.principal == #owner">
    <form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
        <select class="form-control" name="user_id" id="users">
            <option>Select collaborator...</option>
            <option th:each="user : ${users}" th:value="${user.id}"
                    th:text="${user.firstName + ' ' + user.lastName}"></option>
        </select>
        <input align="right" class="btn btn" type="submit" value="Add">
    </form>
</span>

我希望这有帮助:)


0
投票

以防其他人遇到同样的问题,我通过使用“th:if”而不是 sec:authorize 来修复它。

<span th:if="${(#authentication.principal.id == owner.id) or (#authentication.principal.getRole().getName().equals('ADMIN'))}">
    <form class="form-horizontal" th:action="@{/todos/{id}/add(id = ${todo.id})}" method="get">
        <select class="form-control" name="user_id" id="users">
            <option>Select collaborator...</option>
            <option th:each="user : ${users}" th:value="${user.id}"
                    th:text="${user.firstName + ' ' + user.lastName}"></option>
        </select>
        <input align="right" class="btn btn" type="submit" value="Add">
    </form>
</span>
© www.soinside.com 2019 - 2024. All rights reserved.