Spring Security注册后跳转激活页而非登录页的问题求助
问题分析与解决
核心问题:路径不匹配触发拦截
你的代码存在路径命名不一致的关键问题:
SecurityFilterChain中配置的可免授权访问路径是/activate-account(横杠分隔)- 但
AuthController里注册提交后的重定向路径是/activate_account(下划线分隔),同时激活页面的GET请求映射是/activate-account
这就导致注册提交后重定向到/activate_account时,该路径不在Spring Security的permitAll白名单内,被auth.anyRequest().authenticated();规则拦截,触发跳转到登录页。
修复步骤
- 统一路径命名
修改AuthController中的重定向语句,将下划线改为横杠,和Security配置保持一致:
@PostMapping("/register") String registration(@ModelAttribute MyUser user) { userService.registerUser(user); return "redirect:/activate-account"; // 修正路径分隔符 }
同时确保Thymeleaf模板文件名对应改为activate-account.html,保证请求路径和模板名称匹配。
排查自动认证逻辑
检查userService.registerUser(user)方法,确认没有在注册时自动通过SecurityContextHolder为用户设置认证信息。如果注册后用户被自动认证,Spring Security的默认跳转逻辑会干扰你的流程。确认Security配置有效性
当前你的SecurityFilterChain已经将/activate-account加入白名单,无需修改:
auth.requestMatchers( // ...其他路径 antMatcher("/activate-account") ).permitAll();
验证
修改后重启项目,提交注册表单,即可正常跳转到PIN码输入页面,不会再被拦截跳转到登录页。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

