spring Cloud微服务登录一致性解决方案

255 阅读1分钟

一、 微服务登录一致性解决方案

二、案例解析

1.角色

用户微服务与短信微服务

2.问题

用户微服务登录成功后,短信微服务显示未登录,这不符合预期,如何解决该问题

3.分析

使用reids存储登录session,原因所有的微服务都是访问同一个redis,只要用户登录成功了,短信访问redis,有登录session就会同时登录

4.图解

分布式登录图解

分布式登录图解.jpg

5.代码实现

安装对应依赖

<!--        分布式session-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

登录代码

  • 用户登录端口为8012
  • 短信登录端口为8022
@RestController
public class LoginController {
    @RequestMapping("login")
    public String login(HttpSession session) {
        session.setAttribute("user","lizq");
        return "短信服务---登录成功";
    }

    @RequestMapping("loginout")
    public String loginout(HttpSession session) {
        session.invalidate();
        return "短信服务---注销成功";
    }
    @RequestMapping("islogin")
    public String islogin(HttpSession session) {
        Object user = session.getAttribute("user");
        return "短信服务"+(user==null?"未登录":"已登录");
    }
}

运行与实现

  • 用户

分布式登录的实现2.png

  • 短信

分布式登录的实现.png

  • reids

分布式reids.png