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

Spring Boot认证异常:始终重定向登录,无法禁用CSRF,公开URL需认证

Spring Boot安全配置问题排查与修复

问题根源分析

  1. 路径匹配不精确:配置中/home/(末尾带斜杠)仅匹配以/home/开头的路径,实际访问的/home(无斜杠)会被anyRequest().authenticated()规则拦截,触发登录重定向。
  2. 静态资源未放行:若页面依赖CSS/JS/图片等静态资源,这些资源会被默认拦截,导致页面加载时触发认证重定向(表现为页面持续跳登录)。
  3. CSRF禁用配置语法本身正确,但需结合实际请求验证是否生效。

修改后的配置代码

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(auth -> auth
                // 修正路径匹配规则,覆盖/home及所有子路径,添加静态资源放行
                .requestMatchers("/home/**", "/register/**", "/css/**", "/js/**", "/images/**").permitAll()
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .requestMatchers("/user/**").hasRole("USER")
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .permitAll()
            )
            .build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails normalUser = User.builder()
                .username("gc")
                .password("$2a$12$pLlEDlW7J3LJMLMl0Uv8Xu.NO1TYDvrMmIpoDhpHZ3So65XlsR.Vy")
                .roles("USER")
                .build();
        UserDetails adminUser = User.builder()
                .username("admin")
                .password("$2a$12$4MVGfzHJ2C370at3MTGHdeX6z/kon2X5KbVWZTGfqjWBhj.KnQBuC")
                .roles("ADMIN", "USER")
                .build();
        return new InMemoryUserDetailsManager(normalUser, adminUser);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

关键修改说明

  • 路径匹配修正:将/home/改为/home/**,可匹配/home、/home/及/home下的所有子路径,确保公开路径真正绕过认证。
  • 静态资源放行:添加/css/**、/js/**、/images/**等常见静态资源路径,避免页面依赖资源被拦截导致异常重定向。
  • CSRF验证:当前csrf.disable()写法符合Spring Security 6.x语法,可通过Postman发送POST请求到公开接口(如/register)验证,若正常响应则说明CSRF已禁用。

测试步骤

  1. 访问http://localhost:8080/home或http://localhost:8080/register,确认无需登录即可直接访问。
  2. 访问/admin或/user路径,确认会自动跳转到登录页,登录后根据角色权限正常访问对应页面。
  3. 用Postman发送POST请求到/register,验证请求可正常处理(无CSRF拦截报错)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:04:58