码迷,mamicode.com
首页 > 其他好文 > 详细

单点登录demo

时间:2019-02-17 23:53:40      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:用处   配置   这一   集群   stat   cookie   解析   ESS   复制   

环境要求

redis
java 1.8
springMVC
tomcat

前奏

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

技术图片

使用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当中,若有则进入首页,否则跳到登录页面。
流程图如下:

技术图片

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

探入

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

技术图片

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

技术图片

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

技术图片

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

技术图片

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

深入

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

技术图片

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

技术图片

至此,演示结束。

说明

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

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

单点登录demo

标签:用处   配置   这一   集群   stat   cookie   解析   ESS   复制   

原文地址:https://www.cnblogs.com/eblly/p/10393210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!