SpringBootOauth2Server默认的code获取环节使用了303返回异常信息,并且没有可以设置的属性.为了将303信息替换为json返回, 选择使用@Around替换目标方法,实现解析目的
@Component
@Aspect
@Order(1)
public class AuthorizationEndpointAdvice {
// 切入点为AuthorizationEndpoint里面的三个handleException方法
@Pointcut("execution(public * org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint.handle*Exception(..))")
public void pointCut() {
}
@Around("pointCut()")
public ModelAndView test(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
if (args != null && args[0] instanceof Exception) {
//ClientRegistrationException/OAuth2Exception/HttpSessionRequiredException
Exception exception = (Exception) args[0];
//创建返回对象
Result result = Result.failed(exception);
// 使用JsonView将返回对象以json渲染
ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView()).addAllObjects(result.toMap());
modelAndView.setStatus(HttpStatus.BAD_REQUEST);
return modelAndView;
}
return (ModelAndView) pjp.proceed(args);
}
}