jwt 单点退出问题解决方案之一

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的,比如两个不同的浏览器等,希望有更好的解决方案,可以提出来

你可能感兴趣的:(java,spring,boot,微服务,java,jwt,oauth,sso)