CurrentUserResolver.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package com.caimei.annotation;
  2. import com.caimei.components.RedisService;
  3. import com.caimei.mapper.cmMapper.SystemMapper;
  4. import com.caimei.model.po.SysUser;
  5. import com.caimei.model.po.UserPo;
  6. import com.caimei.utils.JwtUtil;
  7. import org.apache.commons.lang.StringUtils;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.core.MethodParameter;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.bind.support.WebDataBinderFactory;
  12. import org.springframework.web.context.request.NativeWebRequest;
  13. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  14. import org.springframework.web.method.support.ModelAndViewContainer;
  15. import javax.annotation.Resource;
  16. /**
  17. * @author Aslee
  18. * @date 2022/7/22
  19. * 统一处理供应商和供应商子用户登陆后,authUserId不明确的问题
  20. */
  21. @Component
  22. public class CurrentUserResolver implements HandlerMethodArgumentResolver {
  23. private RedisService redisService;
  24. @Autowired
  25. public void setRedisService(RedisService redisService) {
  26. this.redisService = redisService;
  27. }
  28. @Resource
  29. private SystemMapper systemMapper;
  30. @Override
  31. public boolean supportsParameter(MethodParameter parameter) {
  32. return parameter.hasParameterAnnotation(CurrentUser.class) &&
  33. parameter.getParameterType().isAssignableFrom(SysUser.class);
  34. }
  35. @Override
  36. public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
  37. NativeWebRequest request, WebDataBinderFactory factory) {
  38. // header中获取用户token
  39. String token = request.getHeader("X-Token");
  40. String cacheToken = null!=token ? String.valueOf(redisService.get(token)) : null;
  41. // Redis过期后会得到"null"值,所以需判断字符串"null"
  42. if (cacheToken != null && cacheToken.length() != 0 && !"null".equals(cacheToken)) {
  43. if (!cacheToken.contains(",")) {
  44. // 后台管理员/供应商/供应商子用户登录
  45. Integer authUserId = JwtUtil.parseTokenUid(cacheToken);
  46. return systemMapper.getUser(authUserId);
  47. } else {
  48. // 前端机构用户登录
  49. /*String[] tokenArr = cacheToken.split(",");
  50. Integer authUserId = Integer.parseInt(tokenArr[1]);
  51. return systemMapper.getUser(authUserId);*/
  52. return null;
  53. }
  54. }
  55. // return systemMapper.getUser(17);
  56. return null;
  57. }
  58. }