首页 文章

为什么Spring Boot会用Spring的叶子图标替换我所有的favicon?

提问于
浏览
4

(我检查了类似的问题,但没有一个解释我在这个问题结尾处说明的奇怪行为 . )

我有一个Spring Boot 1.3.5应用程序,坚持用Boot的默认图标(绿叶)替换我的图标 . 为了解决这个问题,我尝试了以下方法:

  • 在我的应用程序的静态根目录下安装我自己的favicon .

街上的一句话是,这应该是有效的 . 不幸的是,事实并非如此 .

  • 将属性 spring.mvc.favicon.enabled 设置为false .

这应该禁用 org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.FaviconConfiguration ,它似乎负责提供Boot的默认favicon . 通过在该类中设置断点,我能够确认当该属性设置为false时,该类中定义的bean确实没有被创建 .

不幸的是,这也没有解决问题 .

  • 实现我自己的favicon处理程序:
@Configuration
public class FaviconConfiguration {

    @Bean
    public SimpleUrlHandlerMapping faviconHandlerMapping() {
        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("static/");
        List<Resource> locations = Arrays.asList(classPathResource);
        requestHandler.setLocations(locations);
        return requestHandler;
    }

}

可悲的是,这里也没有运气 .

  • 将我的favicon从favicon.ico重命名为logo.ico,然后将我所有页面的favicon链接指向该页面 .

现在,通过这个潜在的解决方案,我发现了令人惊讶的结果 . 当我对我新命名的 icon.ico 资源进行编辑时,我获得了Spring的叶子图标 . 然而,当我删除资源时,我得到了404.但是,当我把它放回去时,我又得到了叶子!换句话说,当我的静态资源丢失时,Spring Boot很乐意回答404,但是当它在那里时,它总是以叶子回答!

顺便提一下,同一文件夹中的其他静态资源(PNG,JPG等)服务很好 .

很容易想象有一些邪恶的Spring Boot贡献者为此傻笑着,因为我把头发拉了出来 . :-)

我没有想法 . 任何人?

作为最后的手段,我可能会放弃使用ICO文件作为我的网站图标,而是使用PNG,但这需要付出代价(失去多分辨率支持),所以我宁愿避免这种情况 .

2 回答

  • 1

    这是一个 spring 启动功能:

    Spring MVC自动配置

    Spring Boot为Spring MVC提供自动配置,适用于大多数应用程序 .

    自动配置在Spring的默认值之上添加了以下功能:

    • 包含ContentNegotiatingViewResolver和BeanNameViewResolver bean .

    • 支持提供静态资源,包括对WebJars的支持(见下文) .

    • 自动注册Converter,GenericConverter,Formatter bean .

    • 支持HttpMessageConverters(见下文) .

    • 自动注册MessageCodesResolver(见下文) .

    • 静态index.html支持 .

    • 自定义Favicon支持 .

    • 自动使用ConfigurableWebBindingInitializer bean(见下文) .

    您可以在以下位置找到此文档:http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

    并且,如果要禁用spring boot favicon,可以将此配置添加到 ymlperperties 文件中

    spring.mvc.favicon.enabled=true # Enable resolution of favicon.ico.
    

    或者,如果你想改变你自己的图标 . 试试这个:

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

    您可以在以下位置找到更多详细信息:Spring Boot: Overriding favicon

    UPDATE:

    将favicon.ico放到资源文件夹中 .

    put favicon.ico to resources

    并尝试一下:

    favicon

  • 1

    为什么选择艰难的方式,什么时候你可以轻松一个?

    只需创建一个新的链接到你的 <head>

    <link rel="icon" type="image/png" href="images/fav.png" />
    

    src/main/resources/static/images/ 复制并粘贴您的图标

    将文件重命名为您想要的任何内容,只需记住更改html中的链接 .

相关问题