SpringBoot学习项目-博客系统-part5
转载
获取用户信息
- 思考如何获取到用户信息?
在登陆的时候,服务器会生成token给客户端,那么下一次在请求头的(Authorization)就会携带TOKEN信息。
- 根据文档可以知道请求地址、请求方式以及请求参数
UsersController
- 为什么要单独开一个controller?emmm,还是为了降耦合吧,把接口尽量分离
- 因为这些还是涉及到了用户表,所以需要SysUserService
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private SysUserService sysUserService;
@GetMapping("currentUser")
public Result currentUser(@RequestHeader("Authorization") String token){
return sysUserService.findUserByToken(token);
}
}
- 根据返回数据形式进行分析,返回了用户id、用户账户、用户头像、用户昵称
- 所以封装一个LoginUserVo类,专门来记录登陆的信息。
@Data
public class LoginUserVo {
private Long id;
private String account;
private String nickname;
private String avatar;
}
SysUserService
//验证
SysUser checkToken(String token);
SysUserServiceImpl
- 分析
- 判断token是否为空,为空,直接返回null
- 不为空,是要用JWTUtils进行验证,会返回一个map
- 对返回的map进行判断,map为空,说明啥也没查到,返回null;
- 接着进行redis方面的验证,因为当时的key是("TOKEN_" + token),所以也用这个key去get。 返回的是一个JSON字符串,如果该字符串为空,同样也是返回null;
- 上面所有为空的逻辑走完了,那么就对这个JSON进行解析,获取user对象。
- 返回这个对象。
@Override
public SysUser checkToken(String token) {
if (StringUtils.isBlank(token)){
return null;
}
Map<String, Object> stringObjectMap = JWTUtils.checkToken(token);
if(stringObjectMap == null){
return null;
}
// redis验证
String userJson = redisTemplate.opsForValue().get("TOKEN_" + token);
if(StringUtils.isBlank(userJson)){
return null;
}
// 进行解析,获取user对象
SysUser sysUser = JSON.parseObject(userJson, SysUser.class);
return sysUser;
}
退出登录
- 根据文档可以得知请求地址、请求方式、请求参数
- 思考:后端如何实现退出?
- 其实后端实现退出只需要在redis中将这个token信息删除即可。
LogoutController
- 为什么要使用loginService?
- 其实登录和退出只是在接口不一样,service是可以实现共享的
@RestController
@RequestMapping("logout")
public class LogoutController {
@Autowired
private LoginService loginService;
@GetMapping
public Result logout(@RequestHeader("Authorization") String token){
return loginService.logout(token);
}
}
LoginService
//退出
Result logout(String token);
LoginServiceImpl
@Override
public Result logout(String token) {
redisTemplate.delete("TOKEN_"+token);
return Result.success(null);
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。