setUser() 用来存储用户信息,这里直接存储了 User 这个实例,getUser() 获取用户信息
public class BaseContext {
public static ThreadLocal<User> threadLocal = new ThreadLocal<>();
public static void setUser(User user) {
threadLocal.set(user);
}
public static User getUser() {
return threadLocal.get();
}
public static void removeUser() {
threadLocal.remove();
}
}
登陆框架使用的是 JWT,在解析出用户信息的时候,将 user 信息存储到 ThredLocal 中,后续使用直接调用 getUser 即可获取该用户信息
private UsernamePasswordAuthenticationToken getAuthentication(String header) {
// 从 Header 中取出 Token
if (header != null) {
String username = JWT.require(Algorithm.HMAC512(SecurityConfig.SECRET.getBytes()))
.build()
.verify(header.replace(SecurityConfig.TOKEN_PREFIX, ""))
.getSubject();
if (username != null) {
User user = userService.loadUserByUsername(username);
BaseContext.setUser(user);
return new UsernamePasswordAuthenticationToken(username, null, user.getAuthorities());
}
}
return null;
}