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で利用できます。