Как я могу получить свой пользовательский ResponseEntityExceptionHandler
или OAuth2ExceptionRenderer
для обработки исключений, вызванных безопасностью Spring на чистом сервере ресурсов?
Мы реализовали
@ControllerAdvice
@RestController
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
поэтому всякий раз, когда на сервере ресурсов появляется ошибка, мы хотим, чтобы он ответил с помощью
{
"message": "...",
"type": "...",
"status": 400
}
Сервер ресурсов использует параметр application.properties:
security.oauth2.resource.userInfoUri: http://localhost:9999/auth/user
для аутентификации и авторизации запроса на нашем сервере auth.
Однако любая ошибка безопасности Spring всегда будет обходить наш обработчик исключений в
@ExceptionHandler(InvalidTokenException.class)
public ResponseEntity<Map<String, Object>> handleInvalidTokenException(InvalidTokenException e) {
return createErrorResponseAndLog(e, 401);
}
и произведите либо
{
"timestamp": "2016-12-14T10:40:34.122Z",
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/api/templates/585004226f793042a094d3a9/schema"
}
или
{
"error": "invalid_token",
"error_description": "5d7e4ab5-4a88-4571-b4a4-042bce0a076b"
}
Итак, как мне настроить обработку исключений безопасности для сервера ресурсов? Все, что я когда-либо нахожу, - это примеры того, как настроить сервер Auth, создав пользовательский OAuth2ExceptionRenderer
. Но я не могу найти, где подключить это к цепочке безопасности сервера ресурсов.
Наша единственная конфигурация/настройка:
@SpringBootApplication
@Configuration
@ComponentScan(basePackages = {"our.packages"})
@EnableAutoConfiguration
@EnableResourceServer