本文介绍了如何在 thymeleaf 表达式中使用 sec:[something]?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道如何使用 sec:authentication="name"
和 sec:authorize="hasAnyRole(...)"
并在自己的 HTML 上生成结果标签,但现在我想在表达式中使用它们,例如:
th:if="${hasAnyRole('ROLE_USER', 'ROLE_ADMIN') and someotherboolexpression}"
有没有办法做到这一点?
解决方案
使用 thymeleaf-extras-springsecurity
模块,您可以使用 #authorization
表达式实用程序对象在 th:if
内部使用 Spring security 的授权表达式.
仅当经过身份验证的用户具有角色 ROLE_ADMIN 时才会显示.
事实上,这个新模块添加的方言使用 sec
作为默认前缀,因此您可以使用 sec:authentication
和 sec:authorize
> 就像您在使用标签库一样.
仅当经过身份验证的用户具有角色 ROLE_ADMIN 时才会显示.
<div sec:authentication="name">身份验证对象的名称"属性的值应出现在此处.
您所要做的就是将方言添加到您的模板引擎配置中
...<属性名称="additionalDialects"><设置><!-- 请注意,如果您使用该版本,该软件包将更改为springsecurity3"--><bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/></set></属性>...</bean>
I know how to use sec:authentication="name"
and sec:authorize="hasAnyRole(...)"
and produce a result on their own HTML tag, but now I want to use them in an expression such as:
th:if="${hasAnyRole('ROLE_USER', 'ROLE_ADMIN') and someotherboolexpression}"
Is there a way of doing this?
解决方案
Using thymeleaf-extras-springsecurity
module, you can use Spring security's authorization expression inside th:if
using the #authorization
expression utility object.
<div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')') and #authorization.expression('...') }">
This will only be displayed if authenticated user has role ROLE_ADMIN.
</div>
In fact the dialects added by this new module use sec
as the default prefix so you can use the sec:authentication
and sec:authorize
as if you are using the tag library.
<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>
All you have to do is to add the dialect to your template engine configuration
<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>
这篇关于如何在 thymeleaf 表达式中使用 sec:[something]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!