微服务登录解决方案

发布于:2025-02-10 ⋅ 阅读:(61) ⋅ 点赞:(0)

微服务登录解决方案

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

网站公告

今日签到

点亮在社区的每一天
去签到