Spring security Login 不会将我的表单(POST)传播到控制器
Posted
技术标签:
【中文标题】Spring security Login 不会将我的表单(POST)传播到控制器【英文标题】:Spring security Login does NOT propagate my form(POST) to Controller 【发布时间】:2019-02-19 03:27:47 【问题描述】:在主页上(permitAll())
我有一个表单(Action "/saveX" authenicated())
我有一个带有 @PostMapping(value="/saveX") 的控制器
用户填写表单数据并点击提交 (POST)
Spring 重定向到默认登录页面
用户输入用户名和密码并点击登录
用户现在可以看到主页(登录功能现在可见)
期待 Spring(成功)登录转发到我的 (@PostMapping)Controller
现在用户已登录
用户填写表单数据并点击提交 (POST)
调用带有@PostMapping(value="/saveX") 的控制器
问题 不应该成功登录导致继续原始操作(即我的表单 POST)
注意 - 会有很多路径可能是验证用户的第一个原因 --- 所以我不会有可以使用的默认成功登录链接
在继续实施更复杂的身份验证机制之前,我想整理这些基础知识 - 所以稍后将替换 Spring 默认登录
非常感谢任何帮助/提示
【问题讨论】:
【参考方案1】:您可以通过实现 AuthenticationSuccessHandler 来做到这一点,并且需要扩展 SimpleUrlAuthenticationSuccessHandler 这将为您提供重定向决策的选项。
public class RefererRedirectionAuthenticationSuccessHandler
extends SimpleUrlAuthenticationSuccessHandler
implements AuthenticationSuccessHandler
public RefererRedirectionAuthenticationSuccessHandler()
super();
setUseReferer(true);
在 Spring Security 配置文件中,您需要使用 successHandler() 方法注册您的 AuthenticationSuccessHandler。
@Configuration
@EnableWebSecurity
public class BasicConfiguration extends WebSecurityConfigurerAdapter
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception
//put your logic here
@Override
protected void configure(HttpSecurity http) throws Exception
http
.authorizeRequests()
.antMatchers("/login*")
.permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.successHandler(new RefererAuthenticationSuccessHandler());
【讨论】:
已进行两项更改 - 现在登录将用户带到登录页面(而不是之前的主页)以上是关于Spring security Login 不会将我的表单(POST)传播到控制器的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot & Spring security 总是重定向到 Login
如何在 Grails/Spring Security 插件中禁用 /login/auth
spring security 改变 spring_security_login 表单