Spring редирект из ErrorController - PullRequest
0 голосов
/ 23 мая 2019

У меня есть несколько страниц общих ошибок, которые используются несколькими приложениями, кроме того, которое я контролирую. Я хотел бы настроить контроллер ошибок Spring Boot для перенаправления на одну из этих страниц. К сожалению, это не работает.

Например.

  @Controller  
  public class MyCustomErrorController implements ErrorController {

    @GetMapping(value = "/error")
    public String handleError(HttpServletRequest request) {
      Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

      if (status != null) {
        Integer statusCode = Integer.valueOf(status.toString());

        if (statusCode == HttpStatus.NOT_FOUND.value()) {
          return "redirect:https://www.example.com/error-404";
        }
      }

      return "redirect:https://www.example.com/error-500";
    }

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

Если, например, я намеренно набрал неверный URL-адрес, я вижу, что ответ содержит заголовок Location с ожидаемым URL-адресом 404, но браузер фактически не перенаправляет. Любые идеи, если можно сделать перенаправление из пользовательского ErrorController?

Может ли это быть из-за того, что я пытаюсь проверить это с localhost, а Strict-Transport-Security игнорирует значение заголовка местоположения ответа (которое находится в FQDN)?

Ответы [ 3 ]

0 голосов
/ 24 мая 2019

Добавьте следующие свойства в application.proerties файл

server.error.whitelabel.enabled=false
0 голосов
/ 25 мая 2019

попробуйте это.

  @Controller  
  public class MyCustomErrorController implements ErrorController {

    @GetMapping(value = "/error")
    public String handleError(HttpServletRequest request) {
      Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

      if (status != null) {
        Integer statusCode = Integer.valueOf(status.toString());

        if (statusCode == HttpStatus.NOT_FOUND.value()) {
          return "redirect:/error-404"; //remove your https://www.example.com
        }
      }

      return "redirect:/error-500";
    }

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

** РЕДАКТИРОВАТЬ **
изменить отображение URL и повторите попытку:
error-404 -> error / 404
error-500 ->ошибка / 500

@Controller  
  public class MyCustomErrorController implements ErrorController {

    @GetMapping(value = "/error")
    public String handleError(HttpServletRequest request) {
      Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

      if (status != null) {
        Integer statusCode = Integer.valueOf(status.toString());

        if (statusCode == HttpStatus.NOT_FOUND.value()) {
          return "redirect:/error/404"; //remove your https://www.example.com
        }
      }

      return "redirect:/error/500";
    }

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

ошибка / 404

@GetMapping("/error/404")

ошибка / 500

@GetMapping("/error/500")
0 голосов
/ 23 мая 2019

Как насчет добавления HttpServletResponse к параметру метода и использования его для перенаправления?

HttpServletResponse response;       
response.sendRedirect("https://www.example.com/error-404");

Ссылка ЗДЕСЬ

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