很多系统登录之后会把用户信息存到rides中,因为代码中要获取当前登录人,
获取当前登录人的方法是前端传过来token,解析token来获取缓存的中用户信息,方法很多,大概都离不开token
如果单纯从请求里面获取token,那子线程是获取不到当前登录人的,所以,可以把tokne存到ThreadLocal里面
实现代码如下:
public class TokenHolder {
private static final ThreadLocal<String> CACHE = new InheritableThreadLocal<>();
public static void set(String token) {
CACHE.set(token);
}
public static String get() {
return CACHE.get();
}
public static void remove() {
CACHE.remove();
}
}
// 拦截器
public class TokenFilter extends OncePerRequestFilter {
public static final String name = "token";
@Override
protected void doFilterInternal(@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain)
throws ServletException, IOException {
String token = request.getHeader(name);
if (StringUtils.isBlank(token)) {
token = request.getParameter(name);
if (StringUtils.isBlank(token)) {
log.error("token不能为空");
}
}
TokenHolder.set(token);
try {
filterChain.doFilter(request, response);
} finally {
TokenHolder.remove();
}
}
}
public static SysLoginUserBO getLoginUser() {
SysLoginUserBO loginBo = null;
try {
String token = TokenHolder.get();
//获取当前登录人
} catch (Exception e) {
log.error(“获取当前登录人失败”, e);
}
return loginBo;
}