【问题标题】:Why does Spring Boot replace all of my favicons with Spring's leaf icon?为什么 Spring Boot 用 Spring 的叶子图标替换了我所有的 favicon?
【发布时间】:2016-11-08 19:20:53
【问题描述】:

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

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

  1. 在我的应用程序的静态根目录中安装我自己的网站图标。

街上的说法是,这只是应该起作用。不幸的是,它没有。

  1. 将属性 spring​.​mvc​.​favicon​.​enabled 设置为 false。

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

很遗憾,这也没有解决问题。

  1. 实现我自己的网站图标处理程序:

    @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;
        }
    
    }
    

很遗憾,这里也没有运气。

  1. 将我的网站图标从 favicon.ico 重命名为 logo.ico,然后将我所有页面的网站图标链接指向该链接。

现在,通过这个潜在的修复,我发现了一个令人惊讶的结果。当我 curled 我新命名的 icon.ico 资源时,我得到了 Spring 的叶子图标。但是,当我删除资源时,我得到了404。但是,当我把它放回去时,我又得到了叶子!换句话说,当我的静态资源丢失时,Spring Boot 很乐意回答 404,但是当它在那里时,它总是会用叶子来回答!

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

很容易想象,当我拔掉头发时,有一些邪恶的 Spring Boot 贡献者为此傻笑。 :-)

我没有想法。有人吗?

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

【问题讨论】:

    标签: spring-boot favicon


    【解决方案1】:

    这是一个 Spring Boot 功能:

    Spring MVC 自动配置

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

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

    1. 包含 ContentNegotiatingViewResolver 和 BeanNameViewResolver 豆子。
    2. 支持提供静态资源,包括支持 WebJars(见下文)。
    3. 转换器的自动注册, GenericConverter、格式化程序 bean。
    4. 支持 HttpMessageConverters (见下文)。
    5. MessageCodesResolver 的自动注册(请参阅 下面)。
    6. 静态 index.html 支持。
    7. 自定义网站图标支持。
    8. 自动使用 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

    更新:

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

    然后,试试看:

    【讨论】:

    • 问题是寻找可能追求的其他想法,问题中尚未提及。不幸的是,这个答案并不承认它试图提供的解决方案已经在问题中给出。此外,它提供的答案之一是错误的。您想将 ....favicon.enabled 设置为 false,而不是 true。最后,这个答案提供了与网站图标配置无关的不必要细节。
    • 我正在使用 spring boot 1.4.1-RELEASE,这对我有用。我只是更新我的答案。顺便说一句,我还没有更改 yml 中的任何配置。
    • 答案的更新部分为我解决了这个问题。奇怪的是,更改图标的记录如此糟糕。
    • @BeeNoisy 我见过很多线程,如果我们只是将“favicon.ico”添加到资源文件夹中,它会自动拾取。出于某种奇怪的原因,我的应用程序的行为不是这样。
    【解决方案2】:

    当你能得到简单的时候,为什么选择困难的方式?

    只需创建一个指向您的&lt;head&gt; 的新链接:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2015-11-15
      • 2020-05-15
      • 2023-02-10
      • 2022-12-04
      • 2016-12-15
      相关资源
      最近更新 更多