Spring安全登录认证成功后不重定向
Spring security does not redirect after successful login authentication
我正在使用 spring security + thymeleaf 来识别我的 css 和 javascript 文件。这些 css 和 javascript 文件构成了我的前端登录页面,由于特殊原因,我的登录表单位于一个 js 文件中,我将此文件包含在我的主 html 文件中。要验证登录凭据,需要使用 javascript 调用自定义 /POST 请求,如下所示。当按下表单提交按钮时执行下面的函数。
function submitForm() {
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("username", "<removed>");
urlencoded.append("password", "<removed>");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("http://localhost:8080/userAuth", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
}
控制器处理成功登录端点
@Controller
public class LoginSuccessController {
@GetMapping("/login_success")
public String success() {
return "success";
}
}
在浏览器上,我可以推断身份验证已成功,并且发生了一些与我成功登录端点相关的事情。但是,我的浏览器仍位于 localhost:8080/login 并且不会重定向到 login_success 端点。我无法弄清楚为什么会这样。非常感谢任何帮助。
Browser network activity after submit button
因为您使用 ajax。如果您检查网络选项卡,我相信您会看到带有 Location
header.
的响应 ans 301/302
编辑:您必须使用纯 html 表单或从 js 端手动重定向
编辑 2:
fetch("http://localhost:8080/userAuth", requestOptions)
.then(response => response.text())
.then(result => {
// do some stuff with response
location.href = '/my-success-page-after-login'; // <- here is redirect
})
.catch(error => console.log('error', error));
解释:问题是浏览器不遵循 AJAX 调用的重定向响应。 Ajax 调用只会 return 服务器的响应(在您的情况下使用 301/302 状态代码重定向)但这不会使浏览器遵循该重定向
我正在使用 spring security + thymeleaf 来识别我的 css 和 javascript 文件。这些 css 和 javascript 文件构成了我的前端登录页面,由于特殊原因,我的登录表单位于一个 js 文件中,我将此文件包含在我的主 html 文件中。要验证登录凭据,需要使用 javascript 调用自定义 /POST 请求,如下所示。当按下表单提交按钮时执行下面的函数。
function submitForm() {
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("username", "<removed>");
urlencoded.append("password", "<removed>");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("http://localhost:8080/userAuth", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
}
控制器处理成功登录端点
@Controller
public class LoginSuccessController {
@GetMapping("/login_success")
public String success() {
return "success";
}
}
在浏览器上,我可以推断身份验证已成功,并且发生了一些与我成功登录端点相关的事情。但是,我的浏览器仍位于 localhost:8080/login 并且不会重定向到 login_success 端点。我无法弄清楚为什么会这样。非常感谢任何帮助。
Browser network activity after submit button
因为您使用 ajax。如果您检查网络选项卡,我相信您会看到带有 Location
header.
编辑:您必须使用纯 html 表单或从 js 端手动重定向
编辑 2:
fetch("http://localhost:8080/userAuth", requestOptions)
.then(response => response.text())
.then(result => {
// do some stuff with response
location.href = '/my-success-page-after-login'; // <- here is redirect
})
.catch(error => console.log('error', error));
解释:问题是浏览器不遵循 AJAX 调用的重定向响应。 Ajax 调用只会 return 服务器的响应(在您的情况下使用 301/302 状态代码重定向)但这不会使浏览器遵循该重定向