依赖
<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);
}
}
浙公网安备 33010602011771号