为什么我没有被重定向到 logoutSuccessUrl?

Why am I not getting redirected to logoutSuccessUrl?

这让我很头疼。我找到的只是如何 禁用 重定向。 我正在尝试做相反的事情,但似乎无法弄清楚如何做!

我想要实现的是:在成功注销后,将用户重定向到另一个页面(无论是登录页面还是注销成功页面)。

发生的情况是:成功注销后,我停留在同一页面上,即使我可以在开发人员工具的网络选项卡下看到正确的响应。

这是我目前拥有的:

安全配置:

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                .csrf(c -> c.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()))
                .oauth2Login()
                    .loginPage("/login").permitAll()
                    .and()
                .logout()
                    .logoutSuccessUrl("/logged-out").permitAll()
                    .invalidateHttpSession(true)
                    .deleteCookies("JSESSIONID");
    }

控制器方法:

    @GetMapping("logged-out")
    public ModelAndView loggedOut(ModelMap model) {
        return new ModelAndView("logged-out", model);
    }

js 脚本挂接到按钮:

let logout = function() {
    let request = new XMLHttpRequest();
    request.open("POST", "/logout");
    request.setRequestHeader("X-XSRF-TOKEN", Cookies.get('XSRF-TOKEN'));
    request.setRequestHeader("Accept", "text/html");
    request.send();
}

点击按钮后的日志事件:

DEBUG 15539 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : GET "/logged-out", parameters={}
DEBUG 15539 --- [nio-8080-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.hamargyuri.petprojectjava2021.controller.HomeController#loggedOut(ModelMap)
DEBUG 15539 --- [nio-8080-exec-9] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html]
DEBUG 15539 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : Completed 200 OK

and here's what I see in the browser

我敢肯定我在这里遗漏了一些非常愚蠢的事情,但我正处于用头撞墙的阶段,所以我很感激任何指导!

所以,我的前端代码似乎有问题,因为如果注销调用成功,它应该做些什么。 我知道这是非常基本的,但这是我在 js 中所做的更改:

let goHome = function() {
    window.location.href = "/";
}

let logout = function() {
    let request = new XMLHttpRequest();
    request.open("POST", "/logout");
    request.setRequestHeader("X-XSRF-TOKEN", Cookies.get('XSRF-TOKEN'));
    request.onload = goHome;
    request.send();
}

我还删除了显式的 logoutSuccessUrl,默认就可以了,我只需要一个成功的响应,然后上面的函数就会带我“回家”。