package com.caimei.annotation; import com.caimei.components.RedisService; import com.caimei.mapper.cmMapper.SystemMapper; import com.caimei.model.po.SysUser; import com.caimei.model.po.UserPo; import com.caimei.utils.JwtUtil; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import javax.annotation.Resource; /** * @author Aslee * @date 2022/7/22 * 统一处理供应商和供应商子用户登陆后,authUserId不明确的问题 */ @Component public class CurrentUserResolver implements HandlerMethodArgumentResolver { private RedisService redisService; @Autowired public void setRedisService(RedisService redisService) { this.redisService = redisService; } @Resource private SystemMapper systemMapper; @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(CurrentUser.class) && parameter.getParameterType().isAssignableFrom(SysUser.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, NativeWebRequest request, WebDataBinderFactory factory) { // header中获取用户token String token = request.getHeader("X-Token"); String cacheToken = null!=token ? String.valueOf(redisService.get(token)) : null; // Redis过期后会得到"null"值,所以需判断字符串"null" if (cacheToken != null && cacheToken.length() != 0 && !"null".equals(cacheToken)) { if (!cacheToken.contains(",")) { // 后台管理员/供应商/供应商子用户登录 Integer authUserId = JwtUtil.parseTokenUid(cacheToken); return systemMapper.getUser(authUserId); } else { // 前端机构用户登录 /*String[] tokenArr = cacheToken.split(","); Integer authUserId = Integer.parseInt(tokenArr[1]); return systemMapper.getUser(authUserId);*/ return null; } } // return systemMapper.getUser(17); return null; } }