LoginUserHandlerMethodArgumentResolver.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package io.renren.modules.api.resolver;
  2. import io.renren.modules.api.annotation.LoginUser;
  3. import io.renren.modules.api.entity.UserEntity;
  4. import io.renren.modules.api.interceptor.AuthorizationInterceptor;
  5. import io.renren.modules.api.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.core.MethodParameter;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.bind.support.WebDataBinderFactory;
  10. import org.springframework.web.context.request.NativeWebRequest;
  11. import org.springframework.web.context.request.RequestAttributes;
  12. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  13. import org.springframework.web.method.support.ModelAndViewContainer;
  14. /**
  15. * 有@LoginUser注解的方法参数,注入当前登录用户
  16. * @author chenshun
  17. * @email sunlightcs@gmail.com
  18. * @date 2017-03-23 22:02
  19. */
  20. @Component
  21. public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
  22. @Autowired
  23. private UserService userService;
  24. @Override
  25. public boolean supportsParameter(MethodParameter parameter) {
  26. return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class);
  27. }
  28. @Override
  29. public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
  30. NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
  31. //获取用户ID
  32. Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST);
  33. if(object == null){
  34. return null;
  35. }
  36. //获取用户信息
  37. UserEntity user = userService.queryObject((Long)object);
  38. return user;
  39. }
  40. }