当前位置: 首页 > article >正文

微服务登录解决方案

文章目录

  • 微服务登录解决方案
    • 1. 微服务用户登录校验流程
    • 2. 微服务登录解决方案
      • 2.1 客户端密码校验并生成token
      • 2.2 网关登录校验
        • 2.2.1 网关原理
        • 2.2.2 编写网关过滤器
      • 2.3 微服务获取用户信息
        • 2.3.1 ThreadLocal工具
        • 2.3.2 微服务拦截器
        • 2.3.3 拦截器配置
      • 2.4 OpenFeign传递用户

微服务登录解决方案

1. 微服务用户登录校验流程

微服务用户登录校验,大致流程如下图:

  1. 客户端用户登录,账户密码通过数据库校验以后,通过jwt生成token,每次向网关请求,都会在请求头中携带token;
  2. 网关会过滤请求,有登录需求的接口,网关会取出请求头中的token进行校验,通过后解析token拿到用户信息存请求头,传递给响应的微服务;
  3. 微服务通过请求头拿到用户信息,存到ThreadLocal,供后续业务使用;
  4. 微服务和微服务之间,也需要互相调用,其之间的调用,也是需要传递用户信息供业务使用;

在这里插入图片描述

2. 微服务登录解决方案

微服务登录解决方案:

在这里插入图片描述

2.1 客户端密码校验并生成token

客户端输入账号密码,查询数据库校验账户密码有效性:

    @Override
    public UserLoginVO login(LoginFormDTO loginDTO) {
   
        // 1.数据校验
        String username = loginDTO.getUsername();
        //TODO:硬编码
//        username = "jack";
        String password = loginDTO.getPassword();
//        password = "123";
        // 2.根据用户名或手机号查询
        User user = lambdaQuery().eq(User::getUsername, username).one();
        Assert.notNull(user, "用户名错误");
        // 3.校验是否禁用
        if (user.getStatus() == UserStatus.FROZEN) {
   
            throw new ForbiddenException("用户被冻结");
        }
        // 4.校验密码
        if (!passwordEncoder.matches(password, user.getPassword())) {
   
            throw new BadRequestException("用户名或密码错误");
        }
        // 5.生成TOKEN
        String token = jwtTool.createToken(user.getId(), jwtProperties.getTokenTTL());
        // 6.封装VO返回
        UserLoginVO vo = new UserLoginVO();
        vo.setUserId(user.getId());
        vo.setUsername(user.getUsername());
        vo.setBalance(user.getBalance());
        vo.setToken(token

http://www.kler.cn/a/471179.html

相关文章:

  • apex安装
  • 【工业场景】用YOLOv8实现工业安全帽识别
  • js可不使用document直接根据id获取id元素
  • 除了RAII和智能指针,还有哪些资源管理机制?
  • LabVIEW瞬变电磁接收系统
  • 运算放大电路汇总及电路仿真
  • 如何申请LabVIEW软件著作权?
  • C# OpenCV机器视觉:背景减除与前景分离
  • Go语言中http.Transport的连接关闭策略与优化方法
  • 【Kaggle】练习赛《预测贴纸的销量》(中)
  • KBQA前沿技术
  • Springboot SAP Docker 镜像打包问题
  • Qt 写无边框窗口时,遇到的问题与解决方法
  • Vue 环境配置与项目创建指南
  • Linux-Ubuntu之SPI串行通信陀螺仪和加速度计
  • Java Web开发进阶——Spring Boot与Spring Data JPA
  • 【2025最新】网络安全攻防实战:护网行动经验与策略解析
  • 120.Jenkins里的Pipeline Script
  • 【Linux网络编程】第二十一弹---深入解析I/O多路转接技术之poll函数:优势、缺陷与实战代码
  • git①111
  • HDFS架构原理
  • TextMeshPro保存偏移数据
  • React18实现账单管理项目(三):日期分组与图标适配
  • 请求是如何通过k8s service 路由到对应的pod
  • Express 加 sqlite3 写一个简单博客
  • Oracle SQL子查询实例