You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf Spring Security Dialect失效,登录后权限标签内容全部显示

Thymeleaf Spring Security Dialect失效问题

登录进入主页后,所有权限相关内容都被显示,sec标签未生效,已配置认证与授权,排查方向如下:

主页代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
                xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head>
    <meta charset="UTF-8" >
    <title>Main page</title>
</head>
<body>
    <h1>Wellcome</h1>
    <sec:authorize access="hasAuthority('ROLE_ADMIN')">
        <h4>You have all possibilities!</h4>
    </sec:authorize>
    <sec:authorize access="isAuthenticated()">
    <h1>You are login</h1>
    </sec:authorize>
    <sec:authorize access="!isAuthenticated()">
        <h1>You are not login</h1>
    </sec:authorize>
</body>
</html>

Maven依赖配置

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <spring.version>5.3.14</spring.version>
    <security.version>5.3.13.RELEASE</security.version>
</properties>

<name>lab_6 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <!-- Spring Core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Spring Context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Spring WebMVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Thymeleaf Spring5 -->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Spring Security Web -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${security.version}</version>
    </dependency>

    <!-- Spring Security Config -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${security.version}</version>
    </dependency>

    <!-- Spring Security Core -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${security.version}</version>
    </dependency>

    <!-- Spring Security Crypto -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-crypto</artifactId>
        <version>${security.version}</version>
    </dependency>

    <!-- Spring Security OAuth2 Client -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-client</artifactId>
        <version>${security.version}</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!-- Spring JDBC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>6.0.12</version>
    </dependency>

    <!-- PostgreSQL Driver -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>
    </dependency>

    <!-- Validation API -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>

    <!-- Hibernate Validator -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.22.Final</version>
    </dependency>

    <!-- Thymeleaf Extras Spring Security5 -->
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        <version>3.0.4.RELEASE</version>
    </dependency>
</dependencies>

WebConfig配置

@Configuration
@EnableWebMvc
@ComponentScan("org.example.lab_6")
public class WebConfig implements WebMvcConfigurer {


    private final ApplicationContext applicationContext;


    @Autowired
    public WebConfig(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }


    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new
                SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        return templateResolver;
    }


    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.addDialect(new SpringSecurityDialect());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

 
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        registry.viewResolver(resolver);
    }

}

可能的原因及解决方法

  • 依赖版本不兼容:thymeleaf-spring5使用3.1.2.RELEASE,而thymeleaf-extras-springsecurity5用的是3.0.4.RELEASE,两者版本不匹配。thymeleaf-extras-springsecurity5 3.0.x仅兼容Thymeleaf 3.0.x,需将dialect版本升级到3.1.2.RELEASE,与Thymeleaf版本保持一致。
  • Spring组件版本冲突:spring-jdbc使用6.0.12,而其他Spring组件版本是5.3.14,Spring 6与Spring 5存在兼容性问题,会导致上下文异常,进而影响Security上下文传递。将spring-jdbc版本改为${spring.version},统一Spring版本。
  • Security过滤器链未生效:确保Spring Security配置类添加@EnableWebSecurity注解,并且正确配置HttpSecurity,保证所有请求都经过Security过滤器,否则SecurityContextHolder无法获取认证信息,sec标签无法正常解析。
  • 缓存问题:清理浏览器缓存、项目target目录,重新编译构建,避免旧缓存导致标签未被正确解析。

内容的提问来源于stack exchange,提问作者Nitrolacs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:35:53