为什么我没有被重定向到 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,默认就可以了,我只需要一个成功的响应,然后上面的函数就会带我“回家”。
这让我很头疼。我找到的只是如何 禁用 重定向。 我正在尝试做相反的事情,但似乎无法弄清楚如何做!
我想要实现的是:在成功注销后,将用户重定向到另一个页面(无论是登录页面还是注销成功页面)。
发生的情况是:成功注销后,我停留在同一页面上,即使我可以在开发人员工具的网络选项卡下看到正确的响应。
这是我目前拥有的:
安全配置:
@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,默认就可以了,我只需要一个成功的响应,然后上面的函数就会带我“回家”。