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

时间:2016-11-08 19:20:54

标签: spring-boot favicon

(我检查了类似的问题,但没有一个解释我在这个问题的最后说明的奇怪行为。)

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

  1. 在我的应用程序的静态根目录中安装我自己的favicon。
  2. 街上的一句话是,这应该是有用的。不幸的是,它没有。

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

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

      1. 实现我自己的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;
            }
        
        }
        
      2. 可悲的是,这里也没有运气。

        1. 将我的favicon从favicon.ico重命名为logo.ico,然后点我的所有页面&#39;相反,favicon链接到那个。
        2. 现在,通过这个潜在的解决方案,我发现了一个令人惊讶的结果。当我curl编辑我新命名的icon.ico资源时,我获得了Spring的叶子图标。然而,当我删除资源时,我得到了404.但是,当我把它放回去时,我又得到了叶子!换句话说,当我的静态资源丢失时,Spring Boot很乐意回答404,但是当它在那里时,它总是以叶子回答!

          顺便提一下,同一文件夹中的其他静态资源(PNG,JPG等)也可以正常使用。

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

          我没有想法。任何人吗?

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

2 个答案:

答案 0 :(得分:1)

这是一个弹簧启动功能:

Spring MVC自动配置

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

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

  1. 包含ContentNegotiatingViewResolver和BeanNameViewResolver 豆子。
  2. 支持提供静态资源,包括支持 WebJars(见下文)。
  3. 转换器的自动注册, GenericConverter,Formatter beans。
  4. 支持HttpMessageConverters (见下文)。
  5. 自动注册MessageCodesResolver(请参阅 下文)。
  6. 静态index.html支持。
  7. 自定义Favicon支持。
  8. 自动使用ConfigurableWebBindingInitializer bean(见下文)。
  9. 您可以在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

    找到更多详细信息

    <强>更新

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

    put favicon.ico to resources

    然后试一试:

    favicon

答案 1 :(得分:1)

为什么选择艰难的方式,什么时候可以轻松搞定?

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

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

src/main/resources/static/images/

中复制并粘贴您的图标

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