如何评估spring security hasRole()中的变量表达式

时间:2017-05-09 09:59:20

标签: java spring-mvc spring-security thymeleaf

用thyemeleaf寻求春季安全方面的帮助。我想在spring security hasRole()函数中传递特定角色作为参数。

 <li sec:authorize="hasRole(__${someVariable}__)" th:if="${#authentication}">

我只想将我的角色作为变量传递“somevariable”将具有类似'admin','systemadmin'等的价值

仅供参考。我正在使用Thymeleaf + Spring

4 个答案:

答案 0 :(得分:0)

我可以通过使用来解决它:

${#authorization.expression('hasRole(__${someVariable}__)')}

答案 1 :(得分:0)

我以避免尝试破解双下划线(例如__${someVariable}__)语法的方式解决了相同的基本问题。

<th:block th:with="secAuth=${yourNormalModelAccessHere}">
  <li class="nav-item" sec:authorize="${#authorization.expression(#vars.secAuth)}">
</th:block>

希望这对某人有帮助。 :)

答案 2 :(得分:-1)

通过一些变量是什么意思?如果您已正确实现了spring安全性,则可以使用sec:authorize="hasRole('ROLE_ADMIN')等来评估hasRole。此外,您不需要包含th:if,因为sec:authorize属性在评估属性表达式时呈现其内容真

参见参考here

答案 3 :(得分:-1)

我会抛弃sec:authorize而是这样写:

<li th:if="${#request.isUserInRole(someVariable)}">

(假设有一些最近版本的Servlet API并在Thymeleaf模板中使用Spring Expression Language。)