站在巨人的肩膀上搬砖

导航

 

依赖

<dependency>
  <groupId>javax.inject</groupId>
  <artifactId>javax.inject</artifactId>
  <version>1</version>
</dependency>

添加拦截: HandlerInterceptorAdapter

@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private UserService userService;
    @Autowired
    private Provider<RequestParameters> requestParameters;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        val handlerMethod = (HandlerMethod) handler;
        if (handlerMethod.getBean() instanceof ErrorController) {
            return true;
        }
        val noAuth = handlerMethod.getMethodAnnotation(NoAuth.class);
        if (noAuth == null){
            val token = request.getHeader(AUTHORIZATION);
            requestParameters.get().setToken(token);
            val userInfo = userService.getUserInfo(token);
            if (userInfo == null) {
                response.setContentType(APPLICATION_JSON_UTF8_VALUE);
                response.getOutputStream().write(new NotLoggedInException().toResponseDTO().toJSONString().getBytes());
                return false;
            }
            requestParameters.get().setCurrentUser(userInfo);
        }
        return true;
    }
}

解析

@Component
public class UserResolver implements HandlerMethodArgumentResolver {
    @Autowired
    private UserService userService;

    @Autowired
    private Provider<RequestParameters> requestParameters;

    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        return null != methodParameter.getParameterAnnotation(CurrentUser.class) && methodParameter.getParameterType().isAssignableFrom(User.class);
    }

    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        return requestParameters.get().getCurrentUser();
    }
}

配置生效

@Log4j2
@Component
public class Configurer implements WebMvcConfigurer {
    @Autowired
    private UserResolver userResolver;
    @Autowired
    private AuthorizationInterceptor authorizationInterceptor;

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers){
        resolvers.add(1, userResolver);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(authorizationInterceptor);
    }
}
posted on 2021-11-04 14:05  站在巨人的肩膀上搬砖  阅读(121)  评论(0)    收藏  举报