(3)获取用户详细信息。
UserController.java:
@GetMapping("/userInfo")
public Result<User> userInfo(@RequestHeader(name = "Authorization") String token){
//根据用户名查询用户
Map<String, Object> map = JwtUtil.parseToken(token);
String username = (String) map.get("username");
User user = userService.findByUserName(username);
return Result.success(user);
}
使用Postman进行测试:
此时发现password也跟随返回了。我们需要其不返回password,所以需要在User类中password上方添加注解@JsonIgnore解决此问题:
再次测试,已解决。
此时创建时间与更新时间仍有问题,查找问题发现数据库字段命名与实体类命名不同,数据库为下划线方式,而实体类为驼峰命名法,两者不一样导致的数据为null。此时在配置文件application.yml中进行配置即可,开启驼峰命名和下划线命名的自动转换。
再次测试,发现此问题也解决。
ThreadLocal:提供线程局部变量
1)用来存取数据: set() / get()
2)使用ThreadLocal存储的数据:线程安全,线程隔离
建立ThreadLocalUtil.java工具类:
修改UserController.java:
进行测试,发现运行无误,说明修改没问题。
**************************************************************************************************************
*****使用完成ThreadLocal后需要及时关闭,防止内存泄漏。修改拦截器LoginInterceptor.java*****
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//清除ThreadLocal数据
ThreadLocalUtil.remove();
}