当自定义登录页面(get)和登录接口(post)的url一样(/login)时候,即:
@PostMapping
@ResponseBody
public String login(Params){
//验证并返回登录结果
}
@GetMapping
public String login(Params){
//跳转登录页面
}
会出现携带账号密码的ajax post请求无法进入到@PostMapping注解的/login中,原因是因为被spring security吞了。
配置了登陆页面/login的spring security,会将从登陆页面传递进来的post请求(并且路径为/login)当作是提交了form表单传递到自己的登录过程中,而修改登陆接口为/loginin,则可以正常访问到。
以上还是猜想。
在spring boot 中的配置代码中
// http请求安全配置
@Override
protected void configure(HttpSecurity http){
http.formLogin()//开启formLogin默认配置
.loginPage("/login")
.loginProcessingUrl("/login");
}
1. loginPage 配置自定义登录页url,默认为/login
2. loginProcessingUrl 配置登录请求拦截的url,也就是form表单提交时指定的action。也就是ajax用post提交登录无法提交到controller的原因。