LoginInterceptor.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.chuanghai.ihotel.interceptor;
  2. import com.chuanghai.ihotel.common.exception.BizCodeEnume;
  3. import com.chuanghai.ihotel.common.utils.CommonResult;
  4. import com.chuanghai.ihotel.util.CommonUtil;
  5. import com.chuanghai.ihotel.util.JWTUtil;
  6. import com.chuanghai.ihotel.vo.LoginUserVO;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import io.jsonwebtoken.Claims;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.http.HttpMethod;
  11. import org.springframework.http.HttpStatus;
  12. import org.springframework.util.StringUtils;
  13. import org.springframework.web.servlet.HandlerInterceptor;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.io.IOException;
  18. import java.io.OutputStream;
  19. /**
  20. * 登录拦截
  21. **/
  22. @Slf4j
  23. public class LoginInterceptor implements HandlerInterceptor {
  24. public static ThreadLocal<LoginUserVO> threadLocal = new ThreadLocal<>();
  25. @Override
  26. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  27. if (HttpMethod.OPTIONS.toString().equalsIgnoreCase(request.getMethod())) {
  28. response.setStatus(HttpStatus.NO_CONTENT.value());
  29. return true;
  30. }
  31. // 获取token信息
  32. String token = request.getHeader("user_token");
  33. // 验证userToken
  34. if (!StringUtils.hasText(token)) {
  35. returnErrorResponse(response, BizCodeEnume.TOKEN_IS_EMPTY);
  36. return false;
  37. }
  38. // 解析token
  39. Claims claims = JWTUtil.checkJWT(token);
  40. if (claims == null) { // 未登录
  41. returnErrorResponse(response, BizCodeEnume.TOKEN_INVALID);
  42. return false;
  43. }
  44. String cardNumber = (String) claims.get("card_number");
  45. String identityType = (String) claims.get("identity_type");
  46. LoginUserVO loginUserVO = LoginUserVO.builder().cardNumber(cardNumber).identityType(identityType).build();
  47. threadLocal.set(loginUserVO);
  48. return true;
  49. }
  50. @Override
  51. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  52. }
  53. @Override
  54. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  55. threadLocal.remove();
  56. }
  57. // 返回错误信息
  58. public void returnErrorResponse(HttpServletResponse response, BizCodeEnume bizCodeEnume) {
  59. try (OutputStream out = response.getOutputStream()) {
  60. CommonResult fail = CommonResult.fail(Integer.toString(bizCodeEnume.getCode()), bizCodeEnume.getMsg());
  61. ObjectMapper objectMapper = new ObjectMapper();
  62. response.setCharacterEncoding("utf-8");
  63. response.setContentType("text/json");
  64. out.write(objectMapper.writeValueAsString(fail).getBytes("utf-8"));
  65. out.flush();
  66. } catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. }