美文网首页
单点登录demo

单点登录demo

作者: eblly | 来源:发表于2017-11-08 14:34 被阅读0次

    环境要求

    redis
    java 1.8
    springMVC
    tomcat
    

    前奏

    单点登录大致有两种方式,一是在tomcat配置session共享,二是使用共享存储。tomcat本身的session复制功能并不好用,官方文档也说明这种方式只适合小集群。共享存储的方式很多,例如存放到缓存、文本、数据库等等,但更普遍的方式是使用redis。
    因此这里我们采用的方式是使用redis作为共享存储的媒介。示意图如下:

    图1-1

    使用docker 运行redis服务。

    docker pull redis:3.2  #下载redis镜像
    docker run  --name redis01 -p 6379:6379 -d redis:3.2
    

    命令解析

    • --name redis01 #设置容器名称
    • -p 6379:6379 #映射主机6379到容器6379端口

    如果你自行安装redis也是可以,这里为了快速就直接使用docker。

    放代码,挺住。

    // 首页
        @RequestMapping(value = "/", method = RequestMethod.GET)
        public String index(@CookieValue(value = "token", defaultValue = "-1") String token, ModelMap map) {
            ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
            HttpServletRequest req = attr.getRequest();
    
            map.put("ip", req.getServerName());
            map.put("port", req.getServerPort());
            map.put("token", token);
    
            log.info("==>token: {}", token);
            if ("-1".equals(token)) {
                return "login";
            }
    
            List<String> tokenList = jedis.lrange("token", 0, -1);
    
            if (tokenList.contains(token)) {
                return "index";
            } else {
                return "login";
            }
        }
    

    上述代码中, List<String> tokenList = jedis.lrange("token", 0, -1) 从redis获取所有的有效token,然后判断当前token是否存在redis的token当中,若有则进入首页,否则跳到登录页面。
    流程图如下:

    image.png

    完整的代码在 https://github.com/javaCases/singleLogin.git

    探入

    将项目部署至两个tomcat中,端口分别为8080和9090。效果如下:

    图1-2

    先在8080端口的这个服务上测试效果。

    图1-3

    因为我们的认证是否登录的凭证是token,在这里的jsessionid并无任何用处。点击登录按钮后。跳转到首页。

    图1-4

    同时可以在cookie中发现有token的存在。

    image.png

    再次访问127.0.0.1:8080会直接进入到首页页面。

    深入

    当我们首次访问127.0.0.1:9090时,看到的是登录页面。将8080端口的token复制添加到9090的cookie中。

    image.png

    再请求127.0.0.1:9090则直接进入到首页。

    image.png

    至此,演示结束。

    说明

    在实际中,会用域名代替我们上面使用的127.0.0.1:8080127.0.0.1:9090。浏览器遇到同一个域名会将cookie全部追加请求头中,并不需要我们手动添加cookie这一步骤。

    如果你还有什么疑问和建议,麻烦评论中提出,谢谢。

    相关文章

      网友评论

          本文标题:单点登录demo

          本文链接:https://www.haomeiwen.com/subject/bxzzpxtx.html