我使用Spring Security对用户进行身份验证,我希望他们能够注销。我使用JWT令牌。我已经设置了:
.logout()
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)))
但是不幸的是,这不起作用,并且在调用/ logout端点后,我仍然拥有JSESSIONID cookie。
我这样称呼它:
this.http.Get("http://localhost:8081/logout").subscribe()
有什么提示吗?
编辑:我试图编写自己的自定义logoutHandler:
public class MyLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
Cookie[] cookies = request.getCookies();
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
super.onLogoutSuccess(request, response, authentication);
}
}
...
.logout()
// .deleteCookies("JSESSIONID")
// .invalidateHttpSession(true)
.logoutSuccessHandler(new MyLogoutSuccessHandler())
但是会话和cookie始终为空(已使用断点检查)。这对我来说没有任何意义,如果它为null,为什么我仍然拥有JSESSIONID?
编辑:关于会话,我已经注意到:
当我到达角形部分(localhost:4200)时,我没有会话cookie
当单击“登录”并且在授权服务器前部重定向时,我获得了与授权服务器域(localhost:8081)关联的会话cookie,其路径为/ uua(这是授权服务器上下文-路径)
当我提交登录表单,然后将我重定向回到有角度的部分时,会话cookie会更改(不同的ID),并且现在已与有角度的域相关联(localhost:4200),仍带有路径/ uua
然后我会注销,在授权服务器上会调用/ logout端点,但是我仍然拥有会话cookie(这次ID不会更改)。
然后我再次登录,我看到我已在授权服务器上重定向,并使用新令牌直接重定向回棱角部分,并且会话cookie仍然相同,但具有相同的ID