本文介绍了如何在 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:authenticationsec: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]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 17:34