Spring如何允许同一用户在运行期间完成多次认证?
解决Spring无状态JWT认证下重复登录失败的问题
问题根源分析
你的配置里存在两处和无状态JWT认证冲突的设置:
.rememberMe():在SessionCreationPolicy.STATELESS模式下,记住我机制完全不生效,反而会引入不必要的会话相关逻辑,干扰认证流程。.logout()相关配置:无状态认证中服务端不维护会话,删除JSESSIONIDCookie毫无意义,这个配置属于冗余项。
修正后的SecurityFilterChain配置
先清理冲突配置,调整后的代码如下:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeHttpRequests(auth -> auth .requestMatchers("/**/auth/**").permitAll() .anyRequest().authenticated() ) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) .authenticationProvider(authenticationProvider()) .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); }
额外排查点
- 认证接口逻辑检查:确保
/**/auth/**接口没有限制同一用户的登录次数,只要用户名密码正确,每次请求都能生成新的JWT Token。如果你的代码里有“同一用户仅保留一个有效Token”的逻辑(比如将Token存入数据库并覆盖旧值),需要取消这个限制,或者在脚本运行前主动失效旧Token。 - Python脚本请求检查:确认每次运行脚本时,都是重新发起认证请求,没有复用之前的无效Token或残留Cookie。检查请求头是否正确携带认证参数,响应的Token是否被正确提取并用于后续请求。
内容的提问来源于stack exchange,提问作者rattulus
相关产品推荐
相关产品推荐

