【发布时间】:2022-01-05 19:16:32
【问题描述】:
这让我很头疼。我发现的只是如何禁用重定向。 我正在尝试做相反的事情,但似乎无法弄清楚如何!
我想要实现的是:在成功注销后,将用户重定向到另一个页面(无论是登录页面还是注销成功页面)。
发生的情况是:成功注销后,我仍停留在同一页面上,即使我可以在开发人员工具的网络选项卡下看到正确的响应。
这是我目前拥有的:
安全配置:
@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
我敢肯定,我在这里错过了一些非常愚蠢的事情,但我正处于撞墙的阶段,所以我很感激任何指导!
【问题讨论】:
-
根据您的屏幕截图,它似乎运行良好! ;) 不幸的是,您的 javascript 客户端正在将响应丢弃在地板上。我认为您依赖于来自 javascript 客户端的重定向,AFAIK 实际上并没有触发您的浏览器来呈现页面。相反,您应该在服务器上为您的 javascript 客户端生成有意义的响应,并将响应处理构建到客户端中。
-
@SteveRiesenberg 谢谢,我现在明白了!我必须让前端对成功的注销调用采取行动。太好了,它现在可以工作了:)
-
耶!很高兴我能帮上忙。这些天我很少能帮助解决 UI 问题,但我得到了这个!
标签: spring-security spring-security-oauth2