微服务登录办理方案
1. 微服务用户登录校验流程
微服务用户登录校验,大致流程如下图:
- 客户端用户登录,账户密码通过数据库校验以后,通过jwt生成token,每次向网关哀求,都会在哀求头中携带token;
- 网关会过滤哀求,有登录需求的接口,网关会取出哀求头中的token举行校验,通过后解析token拿到用户信息存哀求头,传递给响应的微服务;
- 微服务通过哀求头拿到用户信息,存到ThreadLocal,供后续业务使用;
- 微服务和微服务之间,也需要互相调用,其之间的调用,也是需要传递用户信息供业务使用;
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
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |