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 状态代码重定向)但这不会使浏览器遵循该重定向