Spring Boot - Удалить внешний доступ «/ error» к конечной точке - PullRequest
0 голосов
/ 11 марта 2019

Введение

У меня есть пользовательская реализация ErrorController для обработки всех исключений и создания пользовательского сообщения об ошибке:

@RestController
public class CustomErrorController implements ErrorController {
    @RequestMapping("/error")
    public ResponseEntity handleError(HttpServletRequest request) {
        HttpStatus status = HttpStatus.valueOf((Integer) request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE));
        String body = ... // Code to calculate the body based on the request
        return ResponseEntity.status(status.value()).body(body);
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

Описание проблемы

Однако это такжеразрешает доступ к пути /error, который я хотел бы отключить.

При попытке доступа к https://localhost:8443/error метод HttpStatus.valueOf() выбрасывает NullPointerException, поскольку код состояния не может быть извлечен,В результате создается внутренняя ошибка сервера (500), которая запускается через мой пользовательский контроллер, создавая пользовательский ответ об ошибке 500.

Временное исправление

В качестве обходного пути я могу проверитьесли атрибут кода состояния существует, и обрабатывать этот случай отдельно.Но это обходной путь, а не фактическое исправление .

Вопрос

Я хотел бы отключить отображение /error с внешнегодоступ.Если попытаться, результатом должен быть Not Found (404), который затем запускается через мой пользовательский контроллер.

Требуется ли @RequestMapping("/error") или это может быть реализовано по-другому?

Правки

  1. Версия Spring Boot 2.1.2.RELEASE

  2. Свойство server.error.whitelabel.enabled установлено в false.Кажется, проблема не связана с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...