«1. Обзор

Фавикон — это небольшой значок веб-сайта, отображаемый в браузере, обычно рядом с адресом.

Часто мы не хотим соглашаться на те, которые по умолчанию предоставляются различными фреймворками, такими как Spring Boot.

В этом кратком руководстве мы обсудим, как настроить значок значка приложения Spring Boot, рассмотрев различные подходы к настройке значка.

2. Переопределение значка фавикона

Самый простой способ переопределить значок значка по умолчанию для приложения Spring Boot — поместить новый значок в каталог ресурсов:

src/main/resources/favicon.ico

Файл значка должен иметь «favicon .ico – имя.

Мы также можем поместить этот файл в статический каталог внутри каталога ресурсов проекта:

src/main/resources/static/favicon.ico

Spring Boot при запуске сканирует файл favicon.ico в корневом расположении ресурсов, за которым следует расположение статического содержимого.

3. Использование пользовательского местоположения

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

Мы можем сделать это, отключив значок значка по умолчанию в нашем файле application.properties:

spring.mvc.favicon.enabled=false

Стоит отметить, что начиная с Spring Boot 2.2 это свойство конфигурации устарело. Более того, Spring Boot больше не предоставляет фавикон по умолчанию, так как этот значок можно классифицировать как утечку информации.

И затем реализация нашего обработчика:

@Configuration
public class FaviconConfiguration {
 
    @Bean
    public SimpleUrlHandlerMapping customFaviconHandlerMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setOrder(Integer.MIN_VALUE);
        mapping.setUrlMap(Collections.singletonMap(
          "/favicon.ico", faviconRequestHandler()));
        return mapping;
    }

    @Bean
    protected ResourceHttpRequestHandler faviconRequestHandler() {
        ResourceHttpRequestHandler requestHandler
          = new ResourceHttpRequestHandler();
        ClassPathResource classPathResource 
          = new ClassPathResource("com/baeldung/images/");
        List<Resource> locations = Arrays.asList(classPathResource);
        requestHandler.setLocations(locations);
        return requestHandler;
    }
}

Обратите внимание, что мы установили Integer.MIN_VALUE для порядка отображения, поэтому дайте этому обработчику наивысший приоритет.

С этой конфигурацией мы можем хранить наш файл favicon в любом месте в структуре приложения.

4. Изящно отключить фавикон

Если нам не нужен фавикон для нашего приложения, мы можем отключить его, установив для свойства spring.mvc.favicon.enabled значение false. Но при этом при поиске браузеры получают ошибку «404 Not Found».

Мы можем избежать этого с помощью пользовательского контроллера значка, который возвращает пустой ответ:

//...

@Controller
static class FaviconController {
 
    @GetMapping("favicon.ico")
    @ResponseBody
    void returnNoFavicon() {
    }
}

//...

5. Заключение

В этой статье мы увидели, как переопределить значок по умолчанию для загрузочного приложения Spring, использовать пользовательское местоположение для значка и как избежать ошибки 404, если мы не хотим использовать значок.

Как всегда, образцы кода доступны на GitHub.