小编典典

预授权错误处理

spring-boot

我使用Spring Oauth2Spring Pre-post AnnotationsSpring-boot

我有一个服务班MyService。一个MyService方法是:

@PreAuthorize("#id.equals(authentication.principal.id)")
public SomeResponse getExampleResponse(String id){...}

我可以某种方式控制调用方控制器返回的json吗?

默认返回的json是:

{error : "access_denied" , error_message: ".."}

我希望能够控制error_message参数。我正在寻找类似的东西:

@PreAuthorize(value ="#id.equals(authentication.principal.id)", onError ="throw new SomeException("bad params")")
public SomeResponse getExampleResponse(String id){...}

我想到的一种方法是使用 ExceptionHandler

@ExceptionHandler(AccessDeniedException.class)
public Response handleAccessDeniedException(Exception ex, HttpServletRequest request){
    ...
}

但我无法控制message例外。而且我不确定这Exception会在将来的版本中抛出


阅读 357

收藏
2020-05-30

共1个答案

小编典典

有关错误处理的Spring Boot文档:http :
//docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-
features-error-handling
。控制JSON的一种方法是添加@Beantype ErrorAttributes

@Bean
ErrorAttributes errorAttributes() {
    return new MyErrorAttributes();
}
2020-05-30