如何在Thymeleaf`sec:authorize`属性中使用Spring EL表达式

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

我有一个用于存储方法安全表达式的类。

public final class MethodSecurityExpressions {
    public static final String USER = "hasRole('USER')";
}

在控制器中,我已经像这样使用它,

@PreAuthorize(MethodSecurityExpressions.USER)
@GetMapping("path/to/list")
public String list(Model model) {
    return "list";
}

在Thymeleaf模板中,我目前正在执行以下操作,

<ul sec:authorize="hasRole('USER')">
    <li>...</li>
</ul>

但我想做这样的事情,

<ul sec:authorize="#{MethodSecurityExpressions.USER}">
    <li>...</li>
</ul>

我正在使用Spring Boot 1.5.8。我已经阅读了JSP tag library documentationThymeleaf documentation并搜索了所有但没有找到任何有希望的东西。

有谁知道这是可能的,还是知道类似的方法来完成这个?

java spring spring-mvc spring-security thymeleaf
1个回答
1
投票

sec:authorize属性评估Spring Security Expression。该表达式实际上是在SpringSecurity特定的根对象上计算的Spring EL表达式。因此,适当的解决方案可能如下:

<div sec:authorize="${hasRole('#{T(org.example.MethodSecurityExpressions).USER)}'">
</div>

类MethodSecurityExpression

package org.example;

public final class MethodSecurityExpressions {
    public static final String USER = "USER";
}

资料来源:

https://github.com/thymeleaf/thymeleaf-extras-springsecurity https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/html/expressions.html

© www.soinside.com 2019 - 2024. All rights reserved.