Spring Boot中的图标指南

2023/05/11

1. 概述

网站图标是显示在浏览器中的一个小网站图标,通常位于地址旁边。

通常我们不想满足于各种框架(如Spring Boot)提供的默认框架。

在本快速教程中,我们将通过研究自定义网站图标的各种方法来讨论如何自定义Spring Boot应用程序的网站图标

2. 覆盖网站图标

覆盖Spring Boot应用程序默认图标的最简单方法是将新图标放在resources目录中

src/main/resources/favicon.ico

图标文件的名称应该为”favicon.ico“。

我们也可以将该文件放在项目resources目录中的static目录中:

src/main/resources/static/favicon.ico

Spring Boot在启动时扫描根resources位置中的favicon.ico文件,然后扫描static内容位置。

3. 使用自定义的位置

我们可能不想将网站图标放在资源目录的根目录中,而是希望将它与应用程序的其他图像放在一起。

我们可以通过禁用application.properties文件中的默认图标来做到这一点:

spring.mvc.favicon.enabled=false

值得注意的是,从Spring Boot 2.2开始,这个配置属性已被弃用。此外,Spring Boot不再提供默认的图标,因为这个图标可以归类为信息泄漏。

然后实现我们的处理程序:

@Configuration
public class FaviconConfiguration {

    @Bean
    public SimpleUrlHandlerMapping myFaviconHandlerMapping() {
        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("cn/tuyucheng/taketoday/images/");
        List<Resource> locations = List.of(classPathResource);
        requestHandler.setLocations(locations);
        return requestHandler;
    }
}

我们对SimpleUrlHandlerMapping设置setOrder(Integer.MIN_VALUE),以确保它有最高优先级。

通过此配置,我们可以将图标文件存储在应用程序结构中的任何位置

4. 优雅的禁用图标

如果我们不希望我们的应用程序有任何网站图标,我们可以通过将属性spring.mvc.favicon.enabled设置为false来禁用它。但是当浏览器查找时,它们会收到“404 Not Found”错误。

我们可以通过自定义FaviconController来避免这种情况,该控制器返回一个空响应

@Controller
static class FaviconController {

    @GetMapping("favicon.ico")
    @ResponseBody
    void returnNoFavicon() {
    }
}

5. 总结

在本文中,我们看到了如何覆盖Spring Boot应用程序的默认图标,为图标使用自定义位置,以及如果我们不想使用图标时,如何避免404错误。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章