Whitelabel error page что это
Русские Блоги
Основная причина страницы ошибки SpringBoot Whitelabel, три решения и их характеристики
0, краткое описание
Перед изучением этой заметки лучше всего иметь некоторое представление о Spring mvc и Tomcat, чтобы было удобнее понимать.Если вам нужно знать наиболее прямое решение, перетащите его вниз, чтобы увидеть образец кода.
1. Страница ошибки Whitelabel
То, что называется страницей ошибок Whitelabel (также называемой белой страницей), является страницей описания аномального HTTP-запроса в SpringBoot, как показано ниже.
Итак, теперь мы пришли к пониманию, в какой ситуации будут появляться белые страницы и как решить эту проблему. Давайте воспользуемся случаем 404, чтобы понять причину.
Перейти непосредственно к классу DispatcherServlet protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception Метод, содержащий фрагменты кода
В методе getHandler будет выполняться обход HandlerMapping в текущем веб-контейнере, чтобы найти соответствующий обработчик
Не удается найти соответствующий ресурс в mv = ha.handle (loadedRequest, response, mappedHandler.getHandler ()), установите код состояния ответа на 404Подробнее см. Метод handleRequest класса ResourceHttpRequestHandler.
Теперь это эквивалентно установке кода состояния запроса на 404, больше ничего не делается, mv также равно null
В это время вам нужно вернуться к процессу вызова Tomcat. Если вы запрашиваете процесс вызова Tomcat, вы должны знать, что когда Tomcat получает запрос сокета Socket на соединителе, он упаковывается в запрос, ответ и другую информацию, которая будет отправлена в Engine-> Host и другие компоненты. Он доставляется слой за слоем, затем принимается конвейером каждого компонента, а затем фильтруется соответствующим клапаном (клапаном) слой за слоем.
На этот раз дошел до класса StandardHostValve private void status(Request request, Response response) метод
Белая страница mv, предоставляемая SpringBoot, используется позже для визуализации содержимого белой страницы, которую мы видим.
Пока что весь процесс выполнен,Подводя итог, это запрос несуществующей ссылки, которая перенаправляется в запрос / error после того, как обнаруживается, что это запрос 404.
Тогда решение очень простое, есть три решения, но эти три решения под разными углами, чтобы решить проблему.
2. Решите проблему с белой страницей.
2.1, добавить перехватчик
После того, как перехватчик перехватит запрос / error, он вынужден изменить mv, так что последний отрендеренный mv для пробного использования является нашей настраиваемой настройкой, а не содержимым белой страницы, где mv самой белой страницы будет проходить Анализатор представления ContentNegotiating Обработка становится ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
Обратите внимание, что все это истечение фактически было обработано 3 HTTP-запросами,На следующем рисунке показана информация журнала, распечатанная с использованием мониторинга событий HTTP.
Пройдите через / abc ==> jump / err ==> jump / error (содержимое не отображается, потому что содержимое, отправленное в браузер, было отображено с помощью / err
Реальный поток обработки вызовов состоит в том, что / abc не находит подходящий обработчик, а затем решает передать его на путь / error для обработки, но он перехватывается перехватчиком и перенаправляется в / err для обработки.
Недостатки: все запросы для этого маршрута будут перехвачены, включая статические файлы ресурсов, что не оказывает большого влияния на внутренние службы, которые предоставляют чистые интерфейсы. Другие службы будут иметь влияние
2.2, добавьте ErrorPage
Добавление подходящей ErrorPage не приведет к переходу к пути по умолчанию / ошибке перехватчика, а перейдет к настраиваемой ErrorPage. Причина этого была указана в методе статуса выше.
Это проблема скачка петли
Итак, как ее решить, нужно исходить из фундаментальной цели
Вы можете понять конкретные решения самостоятельно.В этой статье не используется отрисовка механизма шаблонов, а непосредственно отображаются основные данные.
2.3, путь добавления / ошибки
Как вы знаете выше, поскольку система по умолчанию переходит к / error и завершает рендеринг данных, недостаточно настроить маршрут / error и избежать проблемы отсутствия статических ресурсов, но обратите внимание, что есть Один вопрос, подробности см. На рисунке ниже
Во-первых, я добавил и определил очень простой метод обработки пути ошибки, но при запуске Springboot есть 3 метода обработки пути ошибки, и они одновременно принадлежат одному и тому же дескриптору. Правила маршрутизации URL Обработка, выберите ручку в автоконфигурации,Это должно было привести к тому, что наш заказ / ошибка недействительны
После тестирования он действительно недействителен, и белая страница все еще отображается, так как это решить? Есть несколько способов сделать то же самое
Мы уже знаем, что эти три / ошибки находятся в картографе маршрутов RequestMappingHandlerMapping.Мы можем сделать так, чтобы пользовательский процессор не сохранялся в карте маршрутов, и сделать Spring приоритетом согласованного преобразователя маршрутов при опросе. Да, но на самом деле BeanNameUrlMapping в handlerMapping все еще находится после RequestMappingHandlerMapping, если вы измените порядок, это также очень сложно
Использование SimpleUrlHandlerMapping не подходит для Springboot. Если вы используете конфигурацию xml, вы можете напрямую установить ее URL-адрес. Это будет очень удобно. Если вы применяете метод аннотации в springboot, требуется дополнительная настройка, как показано в следующем коде
Хотя / error вводится в SimpleUrlHandlerMapping, он все равно будет отображаться, даже если добавлена дополнительная конфигурация Нет ошибки адаптера ,Этот метод не применим
Оглядываясь назад на наблюдение BasicErrorController, мы можем унаследовать интерфейс ErrorController сами.
Spring выдает ошибку Whitelabel error page, что не так?
давай читать то, что написано вместе за ручку =)
«это приложение не имеет эксплицитного (явного) маппинга для /error, поэтому ты видишь это»
добавь какой-то любой маппинг напр
@RestController
public class MyController <
@GetMapping(«/error»)
public String smth() <
return «Error world»;
>
>
пробегись по spring boot in action. сам не читал, но говорят годная, странич всего ничего
в пропертях добавь
server.error.whitelabel.enabled=false
ну или нарисуй свою страничку error.html
закинь в resources/templates
создай свой контроллер чтоб перехватить дефолтовое поведение
@Controller
public class MyErrorController implements ErrorController <
@RequestMapping(«/error»)
public String handleError() <
//do something like logging
return «error»;
>
@Override
public String getErrorPath() <
return «/error»;
>
>
можешь под каждую свою ошибку свою error страничку сделать
типа error404.html error500.html
и переписать метод вот так
@RequestMapping(«/error»)
public String handleError(HttpServletRequest request) <
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if(statusCode == HttpStatus.NOT_FOUND.value()) <
return «error404»;
>
else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) <
return «error500»;
>
>
return «error»;
>
тогда будет подгружать нужную тебе страничку ошибки.
но как ты уже понял. это всё лишь чтоб настроить что показывать.
Whitelabel Error Page in Spring Boot | Complete Guide
Let’s learn about the Whitelabel error page in Spring Boot and how to customize or disable them. White label error pages are default behavior from Spring Boot. Like any other feature, We can customize this feature to great extent.
What are Whitelabel error pages in Spring Boot?
Depending on API client request or browser request, spring boot provides an error JSON response or a full HTML error page. For example, let’s create a simple /hello endpoint that throws an exception always.
Even though this page looks simple, you can add details to it using the following configuration.
Even though the messages are helpful, this page may not fit well with your other page designs. So if you want to override this page with your own design, you are in luck.
Overriding Whitelabel Error Pages
Spring boot provides a /error mapping at a global servlet container level. This mapping handles requests and sends back JSON or HTML view as a response with error codes/messages. But the view that we saw above looks default. If you notice the first line of the error page, it says “This application has no explicit mapping for /error, so you are seeing this as a fallback.”
Here, the spring boot is trying to hint to you that you need to provide your own template to handle these error requests. So let’s see how to do that.
As we know, The handler mapped for /error expects a view to show the HTML response. If it doesn’t find a view matching “error” it will use the placeholder we have seen above. So we first need to add a template called error.html. But the template alone will not work. You also need to add one of the spring boot supported template engines. In our case, we are adding thymeleaf.
Next, you need to add the error.html template into your src/main/resources/templates directory.
With the above in place, the following MVC attributes will be available for you to access in the templates.
Along with these, there is also a status attribute that gives the HTTP status code for the error response. With that in place, we can rewrite our template file to show all these attributes.
This simple template will yield the following error page when we access /hello.
With a little bit of CSS, we can get this page to look better and more appealing.
Disabling Whitelabel error page altogether /Tomcat whitelabel
Spring boot also provides a way to disable the Whitelabel error page altogether using server.error.whitelabel.enabled setting. When set to false, the server will show an error page specific to the servlet container(tomcat). For example, the below error page from tomcat will be visible if the Whitelabel is disabled and no error template is available.
You can swap tomcat with jetty and you will still see an error page like this offered by the jetty runtime. And undertow currently doesn’t provide a view. But it does send response codes.
Important things to note
Always use a custom error.html page for the following reasons.
You can hide specific error attributes based on the configuration we saw earlier. Also, all these configurations are also applicable for the JSON response as well. If your request contains Accept: application/json header, then the response will be in the form of JSON. Even here, you can access all these attributes. For example, take a look at the below request.
Here you can see the trace, exception, and message attributes being available as JSON.
Spring Boot Whitelabel Error
last modified July 6, 2020
Spring Boot Whitelabel Error tutorial shows how to configuare and display error messages in a Spring Boot application.
is a popular Java application framework and is an evolution of Spring which helps create stand-alone, production-grade Spring based applications easily.
WhiteLabel Error Page
WhiteLabel Error Page is a generic Spring Boot error page that is displayed when no custom error page is present.
Alternatively, the exclusion can be done in an annotation.
When the WhiteLabel Error Page is disabled and no custom error page is provided, the web server’s error page (Tomcat, Jetty) is shown.
Spring Boot Custom Error Page
Without using a Thymeleaf template engine, we can place a generic custom error page in a src/main/resources/public/errors directory.
This is a generic error page for 404 error.
A generic error page using a template can be placed in the src/main/resources/templates/ directory.
A specific error page using a template can be placed in the src/main/resources/templates/error/ directory.
Spring Boot Custom Error Page example
In the following example we create a simple Spring Boot application with uses a custom error page for the 404 error.
This is the project structure of the Spring application.
We have a simple controller that returns a text message for a home page.
This is a custom template error page created with Thymeleaf.
This code sets up the Spring Boot application.
In this tutorial, we have covered the WhiteLabel Error and we showed how to create our custom error pages.
Весенняя загрузка: Настройка Страницы с ошибкой Белой Метки
Узнайте, как настроить страницу ошибок по умолчанию в приложении Spring Boot.
1. Обзор
2. Отключение страницы с ошибкой белой метки
Во-первых, давайте посмотрим, как мы можем полностью отключить страницу ошибок с белой меткой, установив для свойства server.error.whitelabel.enabled значение false:
Добавление этой записи в файл application.properties отключит страницу с ошибкой и отобразит краткую страницу, созданную из базового контейнера приложения, например Tomcat.
Мы можем достичь того же результата, исключив ErrorMvcAutoConfiguration компонент. Мы можем сделать это, либо добавив эту запись в файл свойств:
Или добавив эту аннотацию в основной класс:
Все методы, упомянутые выше, отключат страницу ошибок с белой меткой. Это оставляет нас перед вопросом о том, кто же тогда на самом деле обрабатывает ошибку?
Ну, как упоминалось выше, обычно это базовый контейнер приложения. Хорошо то, что мы можем дополнительно настраивать вещи, показывая наши пользовательские страницы ошибок вместо всех значений по умолчанию – это основное внимание в следующем разделе.
3. Отображение Пользовательских Страниц Ошибок
Сначала нам нужно создать пользовательскую страницу ошибок HTML.
Мы сохраним файл как error.html так как мы используем Thymeleaf механизм шаблонов:
Это все, что нам нужно для отображения нашей пользовательской страницы ошибок. С некоторой стилизацией у нас теперь будет гораздо более приятная страница ошибок для наших пользователей:
Мы можем быть более конкретными, назвав файл кодом состояния HTTP, который мы хотим использовать, например, сохранив файл как 404.html в ресурсы/шаблоны/ошибка означает, что он будет явно использоваться для 404 ошибок.
3.1. Пользовательский контроллер ошибок
Ограничение до сих пор заключается в том, что мы не можем запускать пользовательскую логику при возникновении ошибок. Чтобы достичь этого, мы должны создать компонент контроллера ошибок, который заменит компонент по умолчанию.
В приведенном выше фрагменте мы также аннотируем класс с помощью @Controller и создаем сопоставление для пути, указанного в качестве свойства server.error.path:
Давайте еще больше укрепим Ошибка управления() для отображения определенных страниц ошибок для различных типов ошибок.
Например, у нас могут быть красиво оформленные страницы, специально предназначенные для 404 и 500 типов ошибок. Затем мы можем использовать код состояния HTTP ошибки, чтобы определить подходящую страницу ошибки для отображения:
Затем, например, для ошибки 404 мы увидим error-404.html страница:
4. Заключение
С помощью этой информации мы можем теперь более элегантно обрабатывать ошибки и показывать вашим пользователям эстетичную страницу.