LoginUserHandlerMethodArgumentResolver.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package com.kmall.api.resolver;
  2. import com.kmall.api.annotation.LoginUser;
  3. import com.kmall.api.cache.UserTokenCache;
  4. import com.kmall.api.entity.UserVo;
  5. import com.kmall.api.interceptor.AuthorizationInterceptor;
  6. import com.kmall.api.service.ApiUserService;
  7. import org.apache.commons.logging.Log;
  8. import org.apache.commons.logging.LogFactory;
  9. import org.apache.log4j.Logger;
  10. import org.springframework.core.MethodParameter;
  11. import org.springframework.web.bind.support.WebDataBinderFactory;
  12. import org.springframework.web.context.request.NativeWebRequest;
  13. import org.springframework.web.context.request.RequestAttributes;
  14. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  15. import org.springframework.web.method.support.ModelAndViewContainer;
  16. /**
  17. * 有@LoginUser注解的方法参数,注入当前登录用户
  18. *
  19. * @author Scott
  20. * @email
  21. * @date 2017-03-23 22:02
  22. */
  23. public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
  24. private Log logger = LogFactory.getLog(getClass());
  25. private ApiUserService userService;
  26. public void setUserService(ApiUserService userService) {
  27. this.userService = userService;
  28. }
  29. @Override
  30. public boolean supportsParameter(MethodParameter parameter) {
  31. return parameter.getParameterType().isAssignableFrom(UserVo.class) && parameter.hasParameterAnnotation(LoginUser.class);
  32. }
  33. @Override
  34. public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
  35. NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
  36. //获取用户ID
  37. Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST);
  38. if (object == null) {
  39. return null;
  40. }
  41. //获取用户信息
  42. UserVo user = UserTokenCache.getUserInfo((Long) object);
  43. if (null == user) {
  44. user = userService.queryObject((Long) object);
  45. UserTokenCache.putUserInfo(user);
  46. }
  47. return user;
  48. }
  49. }