如何在hasRole中使用SpEL设置html属性?

时间:2018-12-10 16:33:53

标签: spring thymeleaf spring-el

在Spring / Thymeleaf中:我想根据用户是否具有ROLE_A来设置属性。

  1. 我在下面尝试了HTML:

<section class="footer" ... th:someattr="#{hasRole('ROLE_A')} ? 'true' : 'false'">

无论用户是否具有ROLE_A,它始终呈现为<section class="footer" ... someattr="true">

  1. 我也尝试了$ {hasRole('ROLE_A')}吗? 'true':'false',但无法正常工作():
  

SpelEvaluationException:EL1004E:(pos 0):方法调用:方法   在以下位置找不到hasRole(java.lang.String)   org.thymeleaf.spring4.expression.SPELContextMapWrapper类型

如何根据分配的身份验证角色将属性设置为true | false。 谢谢。

2 个答案:

答案 0 :(得分:0)

有时候,这是由于项目的配置引起的。因此,让我们进行一些更改并使用以下代码。

<section class="footer" ... th:someattr="${#authorization.expression('hasRole(''ROLE_A'')' ? 'true' : 'false'}">

要使用#authorization,您将需要添加以下依赖项thymeleaf-extras-springsecurity4

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>

如果您使用的是<artifactId>spring-boot-starter-parent</artifactId>,则不需要向Thymeleaf Extras添加任何版本,因为Spring Boot会为您管理。如果不是,请尝试添加此版本<version>3.0.4.RELEASE</version>

注意:如果它不起作用,请将其更改为thymeleaf-extras-springsecurity5,具体取决于您的Spring版本,而另一个则无效。

答案 1 :(得分:0)

我认为您正在寻找类似的东西:

<section class="footer" ... th:someattr="${#request.isUserInRole('A') ? 'true' : 'false'}">

(不需要“附加”。)