【问题标题】:how to evaluate variable expression in spring security hasRole()如何在 Spring Security hasRole() 中评估变量表达式
【发布时间】:2017-10-07 14:00:58
【问题描述】:

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

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

我只想将我的角色作为变量传递,“somevariable”的值将类似于“admin”、“systemadmin”等

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

【问题讨论】:

    标签: java spring-mvc spring-security thymeleaf


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我可以通过以下方式解决它:

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

      【讨论】:

        【解决方案3】:

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

        见参考here

        【讨论】:

        • 投了反对票的人,应该解释一下原因吗?
        • 如果您仍然想知道,我认为这个想法是检查的角色是一个变量的值,比如用户是否可以动态配置对某些内容的访问。
        • 你为什么要解释这个问题? 'ROLE_ADMIN' 是这里的变量。
        【解决方案4】:

        我会放弃sec:authorize,而是这样写:

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

        (假设最近版本的 Servlet API 和在 Thymeleaf 模板中使用 Spring 表达式语言。)

        【讨论】:

        • 你为什么要放弃 sec:authorize ?
        • @SAP 因为像检查角色这样简单的事情不需要使用安全集成模块(另一个依赖项)。
        • 原来的问题已经提到他已经添加了 sec:authorize 这意味着 thymeleaf-extras-springsecurity 模块已经被使用。但是,由开发人员决定他想走哪条路。
        猜你喜欢
        • 2020-06-26
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多