需要一个工具
/** * 响应json数据给前端 * * @param response * @param obj */ public static void sendJsonMessage(HttpServletResponse response, Object obj) { ObjectMapper objectMapper = new ObjectMapper(); response.setContentType("application/json; charset=utf-8"); try (PrintWriter writer = response.getWriter()) { writer.print(objectMapper.writeValueAsString(obj)); response.flushBuffer(); } catch (IOException e) { log.warn("响应json数据给前端异常:{}",e); } }
搞一个类——拦截类LoginInterceptor
import io.jsonwebtoken.Claims; import lombok.extern.slf4j.Slf4j; import net.xdclass.enums.BizCodeEnum; import net.xdclass.model.LoginUser; import net.xdclass.utils.CommonUtil; import net.xdclass.utils.JWTUtil; import net.xdclass.utils.JsonData; import org.apache.commons.lang3.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Slf4j public class LoginInterceptor implements HandlerInterceptor { public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String accessToken = request.getHeader("token"); if(accessToken == null) { accessToken = request.getParameter("token"); } if(StringUtils.isNotBlank(accessToken)){ //不为空 Claims claims = JWTUtil.checkJWT(accessToken); if(claims == null){ //未登录 CommonUtil.sendJsonMessage(response,JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN)); return false; } long userId = Long.valueOf(claims.get("id").toString()); String headImg = (String)claims.get("head_img"); String name = (String)claims.get("name"); String mail = (String)claims.get("mail"); LoginUser loginUser = new LoginUser(); loginUser.setName(name); loginUser.setHeadImg(headImg); loginUser.setId(userId); loginUser.setMail(mail); //通过attribute传递用户信息 //request.setAttribute("loginUser",loginUser); //通过threadLocal传递用户登录信息 threadLocal.set(loginUser); return true; } CommonUtil.sendJsonMessage(response,JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN)); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { threadLocal.remove(); } }
ThreadLocal这个在哪呢,在这里!
本文作者为DBC,转载请注明。