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

Spring Security拦截表单提交,Spring JPA无法保存用户数据

解决方案:Spring Security拦截注册请求问题

关键问题定位

从日志可见POST /buyer/registerNewBuyer被拦截并重定向到登录页,结合配置分析出核心问题:

  1. 未放行注册提交端点:表单提交的目标路径/buyer/registerNewBuyer未加入permitAll的请求匹配列表,Spring Security默认拦截所有未放行请求。
  2. 无状态会话与表单登录冲突:启用了SessionCreationPolicy.STATELESS无状态会话,但表单登录依赖Session维护认证状态,两者冲突导致认证流程异常。
  3. 冗余CSRF配置:重复设置两次CSRF Token仓库,属于无效冗余代码。

修改后的SecurityFilterChain配置

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http 
         // 保留一次CSRF配置即可
         .csrf((csrf) -> csrf   
          .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()))  
        .authorizeHttpRequests((requests) -> requests
            // 新增放行注册提交的端点
            .requestMatchers("/", "/login", "/signup", 
                    "/buyer/buyer-registration", "/buyer/registerNewBuyer",
                    "/buyer/buyer-reg-success", "/buyer/buyer-reg-error", "/registration-error").permitAll()
            .requestMatchers("/edit", "/delete").authenticated()    
            .anyRequest().authenticated())
        .formLogin((form) -> form
            .loginPage("/login")
            .defaultSuccessUrl("/home", true)
            .failureUrl("/login?error=true")     
            .permitAll())
        .logout((logout) -> logout 
            .logoutSuccessUrl("/")
            .permitAll())
        // 移除无状态会话配置,表单登录需要Session支持
        // .sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
        .authenticationProvider(authenticationProvider)
        .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); 

    return http.build();
}

额外验证步骤

  • 检查CSRF Token:查看注册页面HTML源码,确认是否存在_csrf隐藏字段(Thymeleaf会自动为POST表单注入),若缺失需检查Thymeleaf命名空间和配置。
  • JWT过滤器校验:确保jwtAuthFilter不会拦截/buyer/registerNewBuyer等匿名端点,可在过滤器中添加路径判断跳过这些请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:07:03