content: package com.aizuda.snailjob.server.web.interceptor;
  
  import com.aizuda.snailjob.server.web.annotation.LoginUser;
  import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
  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.context.request.RequestAttributes;
  import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  import org.springframework.web.method.support.ModelAndViewContainer;
  import org.springframework.web.multipart.support.MissingServletRequestPartException;
  
  /**
   * @author opensnail
   * @date 2022-03-06
   * @since 2.0
   */
  @Component
  public class LoginUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
  
      @Override
      public boolean supportsParameter(MethodParameter parameter) {
          return parameter.getParameterType().isAssignableFrom(UserSessionVO.class)
                  && parameter.hasParameterAnnotation(LoginUser.class);
      }
  
      @Override
      public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
                                    WebDataBinderFactory binderFactory) throws Exception {
          UserSessionVO userInfo = (UserSessionVO) webRequest.getAttribute("currentUser", RequestAttributes.SCOPE_REQUEST);
          if (userInfo != null) {
              return userInfo;
          }
          throw new MissingServletRequestPartException("currentUser");
      }
  }
  