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

Spring Boot应用中Thymeleaf的sec:authorize标签不生效问题

问题原因
  • 核心原因是WebSecurityCustomizer配置错误:你将首页路径/、登录路径/login、登出路径/logout都加入了ignoring忽略规则,匹配该规则的请求会完全跳过Spring Security整个过滤器链,安全上下文不会被初始化,Thymeleaf的sec:authorize标签无法获取当前请求的认证状态(既识别不了匿名访问状态,也识别不了已登录状态),因此两块导航内容都无法正常渲染。
  • 自定义的userDetailsService()方法没有添加@Bean注解,Spring容器不会将该实现注册为安全组件,即使请求走安全过滤器链,也无法正常加载用户数据完成认证逻辑。
  • 添加@EnableWebSecurity注解后,Spring Boot默认的安全配置会失效,你没有手动定义SecurityFilterChain核心过滤链Bean,安全授权、登录登出的规则没有实际生效。
  • 配置文件存在拼写错误:sprinf.jpa.database-platform的前缀应为spring,会导致JPA数据库方言配置不生效(该问题不影响sec标签渲染,属于额外配置bug)。
解决方法
  1. 修正静态资源忽略规则,仅将静态资源路径加入忽略列表,移除业务路径、登录登出路径:
@Bean
public WebSecurityCustomizer ignoringCustomizer() {
    return (web) -> web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/error");
}
  1. 给userDetailsService()方法添加@Bean注解,将用户查询服务注册到Spring容器:
@Bean
public UserDetailsService userDetailsService() {
    return new UserDetailsService() {
        @Autowired
        private UsuarioDao usuarioDao;

        @Override
        public org.springframework.security.core.userdetails.UserDetails loadUserByUsername(String username) {
            return usuarioDao.findBy("username", username).get(0);
        }
    };
}
  1. 新增SecurityFilterChain配置Bean,定义基础的路径授权、登录登出规则:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/", "/login").permitAll()
                    .anyRequest().authenticated()
            )
            .formLogin(form -> form
                    .loginPage("/login")
                    .defaultSuccessUrl("/", true)
                    .permitAll()
            )
            .logout(logout -> logout
                    .logoutSuccessUrl("/")
                    .permitAll()
            );
    return http.build();
}
  1. 修正application.properties中的拼写错误,将sprinf.jpa.database-platform改为spring.jpa.database-platform。
  2. 确认项目中已引入Thymeleaf与Spring Security的整合依赖:Spring Boot 2.x版本引入thymeleaf-extras-springsecurity5,Spring Boot 3.x版本引入thymeleaf-extras-springsecurity6,否则sec:*标签无法正常解析。你手动注册SpringSecurityDialectBean的代码可以保留,引入依赖后该Bean也会被自动注册,不会产生冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:36:22