============= 后端_用户信息 ============= 用户一旦登录成功,前端会把后端返回的令牌存放在本地存储(storage)中。 前端可以根据本地存储中的令牌获取当前登录用户的信息。 后端所要做的就是根据前端提供的令牌从Redis中查询对应用户的信息返回前端。 1 视图对象 1.1 用户视图对象 /ysdblog-api/src/main/java/com/weihome/ysdblog/vo/UserVo.java: @Data public class UserVo { private Long id; private String account; private String avatar; private String nickname; } 2 登录服务 2.1 登录服务接口 /ysdblog-api/src/main/java/com/weihome/ysdblog/service/LoginService.java: public interface LoginService { ... /** * 根据令牌查询用户 */ public User findUserByToken(String token); ... } 2.2 登录服务实现 /ysdblog-api/src/main/java/com/weihome/ysdblog/service/impl/LoginServiceImpl.java: ... public class LoginServiceImpl implements LoginService { ... @Override public User findUserByToken(String token) { if (StringUtils.isBlank(token)) return null; Map payload = JWTUtils.checkToken(token); if (payload == null) return null; String userJson = redisTemplate.opsForValue().get( "TOKEN_" + token); if (StringUtils.isBlank(userJson)) return null; return JSON.parseObject(userJson, User.class); } ... } 3 用户服务 3.1 用户服务接口 /ysdblog-api/src/main/java/com/weihome/ysdblog/service/UserService.java: public interface UserService { ... /** * 根据令牌查询用户 */ public Result findUserByToken(String token); ... } 3.2 用户服务实现 /ysdblog-api/src/main/java/com/weihome/ysdblog/service/impl/UserServiceImpl.java: ... public class UserServiceImpl implements UserService { ... @Autowired private LoginService loginService; ... @Override public Result findUserByToken(String token) { User user = loginService.findUserByToken(token); if (user == null) return Result.fail( ErrorCode.TOKEN_ERROR.getCode(), ErrorCode.TOKEN_ERROR.getMsg()); UserVo userVo = new UserVo(); BeanUtils.copyProperties(user, userVo); return Result.success(userVo); } ... } 4 用户控制器 /ysdblog-api/src/main/java/com/weihome/ysdblog/controller/UserController.java: @RestController @RequestMapping("user") public class UserController { @Autowired private UserService userService; /** * 查询当前用户信息 */ @GetMapping("current") public Result current(@RequestHeader("Authorization") String token) { return userService.findUserByToken(token); } } 5 运行测试 Postman GET localhost:8888/user/current Headers Authorization: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDk1NzgzNjUsInVzZXJJZCI6MSwiaWF0IjoxNjQ4Njg5MzMyfQ.GSsoLNluJwDseqaglBBvKmMZdtdBapInPdnTHs3oXv8 -------------------------------- { "success": true, "code": 200, "msg": "success", "data": { "id": 1511575239857848321, "account": "user_a", "avatar": "/static/img/logo.b3a48c0.png", "nickname": "nickname_a" } }