我知道如何使用sec:authentication="name"
和sec:authorize="hasAnyRole(...)"
并在自己的HTML标记上生成结果,但现在我想在表达式中使用它们,例如:
th:if="${hasAnyRole('ROLE_USER', 'ROLE_ADMIN') and someotherboolexpression}"
有没有办法做到这一点?
答案 0 :(得分:13)
使用thymeleaf-extras-springsecurity
模块,您可以使用th:if
表达式实用程序对象在#authorization
内使用Spring security的授权表达式。
<div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')') and #authorization.expression('...') }">
This will only be displayed if authenticated user has role ROLE_ADMIN.
</div>
事实上,这个新模块添加的方言使用sec
作为默认前缀,因此您可以使用sec:authentication
和sec:authorize
,就像使用标记库一样。
<div sec:authorize="hasRole('ROLE_ADMIN')">
This will only be displayed if authenticated user has role ROLE_ADMIN.
</div>
<div sec:authentication="name">
The value of the "name" property of the authentication object should appear here.
</div>
您所要做的就是将方言添加到模板引擎配置
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
...
<property name="additionalDialects">
<set>
<!-- Note the package would change to 'springsecurity3' if you are using that version -->
<bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/>
</set>
</property>
...
</bean>