我有一个用于存储方法安全表达式的类。
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 documentation和Thymeleaf documentation并进行了搜索,但没有找到任何有希望的内容。
是否有人知道这是否可行,或者知道类似的方法来实现这一目标?
答案 0 :(得分:1)
sec:authorize
属性评估Spring Security Expression。该表达式实际上是在SpringSecurity特定的根对象上计算的Spring EL表达式。因此,适当的解决方案可能如下:
<div sec:authorize="${hasRole('#{T(org.example.MethodSecurityExpressions).USER)}'">
</div>
Class 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