jwt简述
1、首先jwt是无状态登录,所以我们控制它的失效时间,从它被创建出来,就已经规定死了,它能存活多久
寻找解决方案的历程
最近项目需要使用单点登录技术,搞好之后,发现单点退出有问题,然后又是各种逛技术论坛啊,但是得到的最多的是,jwt官网已经说明,要让jwt失效很难,也违背了它设计的初衷,所以可以说根本没有比较好的解决方案,有的说用reids来存储,但是另外的几个项目非我公司的,并不能统一调度,所以这一个方案被废弃了,还有说用token黑名单,但那也只是一个概念性的东西,具体没找大代码的落地,白白高兴一场,最后还是瞎猫碰死耗子,我发现把cookie清空就实现退出功能,然后就编写相关代码,最后发现真的可以实现,
解决方案
1、首先在spring boot配置文件进行cookie的相关配置cookie的名字和path(path要和其他的项目保持一致,否则到时候无法获取其他path下的cookie)
server:
port: 8084
servlet:
context-path: /client2
session:
cookie:
name: client2
path: /
2、编写让cookie失效的代码
@RequestMapping("/exit")
public void exit(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
final Cookie[] cookies = httpServletRequest.getCookies();
for (Cookie cookie : cookies) {//让所有的cookie失效
System.out.println(cookie.getName());
cookie.setMaxAge(-1);
cookie.setValue(null);
cookie.setPath("/");
httpServletResponse.addCookie(cookie);
}
//跳转到登录界面
httpServletResponse.sendRedirect("http://localhost:8082/uaa/authentication/require");
}
这个解决方案还是有bug的,比如两个不同的浏览器等,希望有更好的解决方案,可以提出来