【发布时间】:2016-11-08 19:20:53
【问题描述】:
(我检查了类似的问题,但没有一个能解释我在这个问题末尾说明的奇怪行为。)
我有一个 Spring Boot 1.3.5 应用程序,它坚持用 Boot 的默认 favicon(绿叶)替换我的 favicon。为了解决这个问题,我尝试了以下方法:
- 在我的应用程序的静态根目录中安装我自己的网站图标。
街上的说法是,这只是应该起作用。不幸的是,它没有。
- 将属性
spring.mvc.favicon.enabled设置为 false。
这应该禁用org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.FaviconConfiguration,它似乎负责为 Boot 的默认网站图标提供服务。通过在该类中设置断点,我能够确认当属性设置为 false 时,该类中定义的 bean 确实没有被创建。
很遗憾,这也没有解决问题。
-
实现我自己的网站图标处理程序:
@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.ico 重命名为 logo.ico,然后将我所有页面的网站图标链接指向该链接。
现在,通过这个潜在的修复,我发现了一个令人惊讶的结果。当我 curled 我新命名的 icon.ico 资源时,我得到了 Spring 的叶子图标。但是,当我删除资源时,我得到了404。但是,当我把它放回去时,我又得到了叶子!换句话说,当我的静态资源丢失时,Spring Boot 很乐意回答 404,但是当它在那里时,它总是会用叶子来回答!
顺便说一句,同一文件夹中的其他静态资源(PNG、JPG 等)也可以正常使用。
很容易想象,当我拔掉头发时,有一些邪恶的 Spring Boot 贡献者为此傻笑。 :-)
我没有想法。有人吗?
作为最后的手段,我可能会放弃使用 ICO 文件作为我的网站图标,而改用 PNG,但这是有代价的(失去多分辨率支持),所以我宁愿避免这样做。
【问题讨论】:
标签: spring-boot favicon