将 SpringBoot 从 2.0.6.RELEASE 更新到 2.1.0.RELEASE 后计算 SpringEL 表达式时出现异常

Nuñ*_*ada 0 spring spring-mvc spring-el thymeleaf spring-boot

我有一个带有以下 pom.xml 的 SpringBoot 应用程序:

\n\n
...\n<parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.0.6.RELEASE</version>\n        <relativePath/> \n    </parent>\n\n<!-- Spring Security -->\n        <dependency>\n            <groupId>org.thymeleaf.extras</groupId>\n            <artifactId>thymeleaf-extras-springsecurity4</artifactId>\n        </dependency>\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且运行良好。\n然后我将 SpringBoot 版本更新为

\n\n
...\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.1.0.RELEASE</version>\n        <relativePath/> \n    </parent>\n\n        <dependency>\n            <groupId>org.thymeleaf.extras</groupId>\n            <artifactId>thymeleaf-extras-springsecurity4</artifactId>\n            <version>3.0.4.RELEASE</version> \n        </dependency>\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在 1 个模板中收到此错误:

\n\n
Exception evaluating SpringEL expression: "#authorization.expression(\'hasRole(\'\'ROLE_ADMIN\'\')\')" (template: "tdk/common/menu" - line 87, col 21)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里是模板:

\n\n
 <li th:if="${#authorization.expression(\'hasRole(\'\'ROLE_ADMIN\'\')\')}"    class="menu-principal pure-menu-item" th:classappend="${activeMenuItem == \xe2\x80\x98tdkMessages\'} ?  pure-menu-selected">\n                    <a href=\xe2\x80\x9c/tdk/list" class="pure-menu-link">\n                        <i class="fas fa-cloud-download-alt fa-lg fa-fw"></i>&nbsp; tdk\n                    </a>\n                </li>\n
Run Code Online (Sandbox Code Playgroud)\n

M. *_*num 5

Thymeleaf 现在有一种针对 Spring Security 5 的特殊扩展/方言。您需要使用它来代替 Spring Security 4 的扩展/方言。

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题,它<version>是由 Spring Boot 管理的,所以你不需要添加它。