1. 概要

ファビコンは、ブラウザに表示される小さなWebサイトのアイコンで、通常はアドレスの横に表示されます。

多くの場合、Spring Bootなどのさまざまなフレームワークによって提供されるデフォルトのものを採用したくありません。

このクイックチュートリアルでは、ファビコンをカスタマイズするためのさまざまなアプローチを検討することにより、Spring Bootアプリケーションのファビコンをカスタマイズする方法について説明します。

2. ファビコンをオーバーライドする

Spring Bootアプリケーションのデフォルトのファビコンをオーバーライドする最も簡単な方法は、新しいファビコンをリソースディレクトリに配置することです。

src/main/resources/favicon.ico

ファビコンファイルには「favicon.ico」という名前が付いている必要があります。

そのファイルを、プロジェクトのリソースディレクトリ内のstaticディレクトリに配置することもできます。

src/main/resources/static/favicon.ico

起動中にSpringBootを実行し、ルートリソースの場所にある 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を設定していることに注意してください。したがって、このハンドラーに最高の優先度を与えます。

この構成では、アプリケーション構造内の任意の場所にファビコンファイルを保存できます

4. ファビコンを正常に無効にする

アプリケーションにファビコンが必要ない場合は、プロパティ spring.mvc.favicon.enabledをfalseに設定して無効にすることができます。 しかし、これを使用すると、ブラウザがルックアップするときに「404NotFound」エラーが発生します。

空の応答を返すカスタムファビコンコントローラーを使用すると、これを回避できます。

//...

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

//...

5. 結論

この記事では、Springブートアプリケーションのデフォルトのファビコンをオーバーライドする方法、ファビコンにカスタムの場所を使用する方法、ファビコンを使用したくない場合に404エラーを回避する方法について説明しました。

いつものように、コードサンプルはGitHubで利用できます。