1. 概述
Favicon 是一個網站圖標,在瀏覽器中顯示,通常位於地址欄旁邊。
我們通常不希望接受各種框架(例如 Spring Boot)提供的默認圖標。
在本快速教程中,我們將討論如何自定義 Spring Boot 應用程序的 favicon,通過研究各種自定義 favicon 的方法。
2. 覆蓋默認Favicon
Spring Boot應用程序的簡單方法是將新的Favicon放置在resources目錄下:
src/main/resources/favicon.ico
Favicon 文件應具有 “favicon.ico” 的名稱。
我們還可以將該文件放在項目資源目錄下的 static 目錄中:
src/main/resources/static/favicon.icoSpring Boot 在啓動時,會掃描根目錄下 resources 目錄以及靜態內容目錄中是否存在 <em >favicon.ico</em> 文件。
3. 使用自定義位置
與其將 favicon 放在資源目錄的根級別,不如將其與應用程序的其他圖像一起保留。
我們可以通過在我們的 application.properties 文件中禁用默認 favicon 來實現這一點:
spring.mvc.favicon.enabled=false值得注意的是,自 Spring Boot 2.2 版本起,此配置屬性已被棄用。 此外,Spring Boot 不再提供默認的 favicon,因為該圖標可能被視為信息泄露。
然後實現我們的處理器:
@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. 優雅禁用 Favicon
如果不想為我們的應用程序設置 favicon,我們可以通過將 spring.mvc.favicon.enabled 屬性設置為 false 來禁用它。但是,這樣做會導致瀏覽器在查找時出現“404 未找到”錯誤。
我們可以通過使用 自定義 favicon 控制器,返回一個空響應 來避免這種情況:
//...
@Controller
static class FaviconController {
@GetMapping("favicon.ico")
@ResponseBody
void returnNoFavicon() {
}
}
//...5. 結論
在本文中,我們學習瞭如何覆蓋 Spring Boot 應用程序的默認 favicon,使用自定義 favicon 位置,以及如何在不使用 favicon 時避免 404 錯誤。