12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package com.kmall.api.resolver;
- import com.kmall.api.annotation.LoginUser;
- import com.kmall.api.cache.UserTokenCache;
- import com.kmall.api.entity.UserVo;
- import com.kmall.api.interceptor.AuthorizationInterceptor;
- import com.kmall.api.service.ApiUserService;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.log4j.Logger;
- import org.springframework.core.MethodParameter;
- import org.springframework.web.bind.support.WebDataBinderFactory;
- import org.springframework.web.context.request.NativeWebRequest;
- import org.springframework.web.context.request.RequestAttributes;
- import org.springframework.web.method.support.HandlerMethodArgumentResolver;
- import org.springframework.web.method.support.ModelAndViewContainer;
- /**
- * 有@LoginUser注解的方法参数,注入当前登录用户
- *
- * @author Scott
- * @email
- * @date 2017-03-23 22:02
- */
- public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
- private Log logger = LogFactory.getLog(getClass());
- private ApiUserService userService;
- public void setUserService(ApiUserService userService) {
- this.userService = userService;
- }
- @Override
- public boolean supportsParameter(MethodParameter parameter) {
- return parameter.getParameterType().isAssignableFrom(UserVo.class) && parameter.hasParameterAnnotation(LoginUser.class);
- }
- @Override
- public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
- NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
- //获取用户ID
- Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST);
- if (object == null) {
- return null;
- }
- //获取用户信息
- UserVo user = UserTokenCache.getUserInfo((Long) object);
- if (null == user) {
- user = userService.queryObject((Long) object);
- UserTokenCache.putUserInfo(user);
- }
- return user;
- }
- }
|