将 SpringBoot 从 2.0.6.RELEASE 更新为 2.1.0.RELEASE 后评估 SpringEL 表达式的异常

Exception evaluating SpringEL expression after updating SpringBoot from 2.0.6.RELEASE to 2.1.0.RELEASE

我有一个 SpringBoot 应用程序 pom.xml:

...
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> 
    </parent>

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

它运行良好。 然后我将SpringBoot版本更新为

...
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> 
    </parent>

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

我在 1 个模板中遇到了这个错误:

Exception evaluating SpringEL expression: "#authorization.expression('hasRole(''ROLE_ADMIN'')')" (template: "tdk/common/menu" - line 87, col 21)

这里是模板:

 <li th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')')}"    class="menu-principal pure-menu-item" th:classappend="${activeMenuItem == ‘tdkMessages'} ?  pure-menu-selected">
                    <a href=“/tdk/list" class="pure-menu-link">
                        <i class="fas fa-cloud-download-alt fa-lg fa-fw"></i>&nbsp; tdk
                    </a>
                </li>

Thymeleaf 现在有一个特殊的 extension/dialect 用于 Spring 安全 5。您将需要使用它而不是用于 Spring 安全 4 的那个。

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

应该可以解决问题,<version> 由 Spring Boot 管理,因此您无需添加它。