在基于Spring MVC的应用程序中配置favicon.ico

Favicon是与您的网站相关的图标(favicon.ico)。 并非每个网站都在使用favicon。 但是大多数浏览器并不关心它,反正他们都要求它。 当图标图标不在适当位置时,服务器将返回不必要的404 Not Found错误。

在典型的Spring MVC应用程序中,我们首先需要配置安全过滤器,该过滤器允许所有对favicon.ico的请求,因为Spring Security会缓存用户的请求,包括favicon.ico请求。 成功通过身份验证后,Spring Security会将我们重定向到显示错误的资源。 为了避免这种情况,我们通过以下方式配置安全过滤器:

<security:http auto-config="true" disable-url-rewriting="true" use-expressions="true"><security:form-login login-page="/signin" authentication-failure-url="/signin?error=1" /><security:logout logout-url="/logout" invalidate-session="false"/><security:intercept-url pattern="favicon.ico" access="permitAll" /><security:intercept-url pattern="/" access="permitAll" /><security:intercept-url pattern="/error" access="permitAll" /><security:intercept-url pattern="/resources/**" access="permitAll" /><security:intercept-url pattern="/signin" access="permitAll" /><security:intercept-url pattern="/signup" access="permitAll" /><security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>

该配置可确保当请求favicon.ico时,不需要身份验证。 此技巧使我们无法在登录应用程序后看到“ 404 Not Found ”。

通常,我们要做的就是使404 Not Found在Spring MVC / Spring Security应用程序中“消失”。 但是实际上,客户端仍将寻找该资源,服务器将返回404 Not Found错误。

如果我们不想在我们的网站上使用favicon,可以采用以下几种方法使服务器在请求后不返回错误。

可能最简单的方法是在静态资源中添加一个“空白” favicon.ico,并让服务器根据请求提供此文件。 在以下配置中,Spring处理来自/resources/目录的静态资源,该目录映射到/resources/**路径:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {private static final String RESOURCES_HANDLER = "/resources/";private static final String RESOURCES_LOCATION = RESOURCES_HANDLER + "**";@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(RESOURCES_HANDLER).addResourceLocations(RESOURCES_LOCATION);}}

可以将favicon.ico文件添加到resource/images目录,但是随后应创建其他@Controller以将任何favicon.ico请求转发到实际图标。 我正在使用配置中的静态类来执行此操作:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {@Controllerstatic class FaviconController {@RequestMapping("favicon.ico")String favicon() {return "forward:/resources/images/favicon.ico";}}}

怎么运行的? 当客户端请求localhost:8080/favicon.ico ,控制器会将请求转发到静态资源。 将来,当您需要为网站提供favicon.ico时,只需替换resources/images目录中的文件即可。

我最近想到的另一种方法是,添加一个@Controller ,它具有一个返回空@ResponseBody方法:

@Controller
class FaviconController {@RequestMapping("favicon.ico")@ResponseBodyvoid favicon() {}
}

它将解决404 Not Found问题,但将来您将需要记住进行配置更改,以防您需要为网站添加favicon.ico。

  • 可以在GitHub上的Spring MVC快速入门原型中找到该配置。

参考:来自我们的JCG合作伙伴 Rafal Borowiec在基于Spring MVC的应用程序中 ,在Codeleak.pl博客上配置favicon.ico 。

翻译自: https://www.javacodegeeks.com/2014/02/configure-favicon-ico-in-spring-mvc-based-application.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue.js java php_准吗?Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js!

编程语言与框架或者库之间有联系是很正常的事情&#xff0c;如果我们告诉你&#xff0c;使用某一种编程语言或技术的开发人员可能更喜欢某个框架&#xff0c;你会作何反应呢&#xff1f;Stack Overflow根据网站内最常访问的标签将开发人员分为多个组&#xff0c;并检查了每组每…

BAJT高级Java面试题

答对这些面试题&#xff0c;PASS 掉 80 % 的竞争者 hashcode相等两个类一定相等吗?equals呢?相反呢? 介绍一下集合框架? hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢? hashmap和treemap什么区别?低层数据结构是什么? 线程池用过吗都有什么…

结构化日志:出错时你最想要的好朋友

目录 介绍什么是日志&#xff1f;Grab中日志的状况为什么改变&#xff1f;结构化日志支持不同格式的多写开发中类似生产环境的日志因果顺序但为什么要结构化记日志&#xff1f;原文&#xff1a;Structured Logging: The Best Friend You’ll Want When Things Go Wrong 介绍 在…

在vue项目中添加特殊字体

这里的特殊字体&#xff0c;指的是一般用户电脑未安装到本地的字体&#xff0c;要引入这样的字体&#xff0c;首先需要把字体文件下载下来。 就像上图这样的&#xff0c;ttf格式的&#xff0c;然后在项目里添加它。 然后我们在font.css里用font-face规则引入这个字体文件并命名…

使用Spring WS创建合同优先的Web服务

1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例使用JAXB2进行&#xff08;取消&#xff09;编组。 为了开发服务&#xff0c;我将使用合同优先的方法&#xff0c;该方法首先定义服务合同&#xff0c;然后基于该合同实施服务。 本文分为…

java中的常用日期类_Java中的常用日期类说明

日期类常用的有三个&#xff0c;Date类&#xff0c;Calendar(日历)类和日期格式转换类(DateFormat)Date类中的大部分的方法都已经过时&#xff0c;一般只会用到构造方法取得系统当前的时间。public class DateDemo {public static void main(String[] args) {Date date new Da…

转载 Net多线程编程—System.Threading.Tasks.Parallel

.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke&#xff0c;Parallel.For&#xff0c;Parallel.ForEach这三个静态方法。 1 Parallel.Invoke 尽可能并行执行所提供的每个操作&#xff0c;除非用户取消了操作。 方法…

三方面搞定http协议之“状态码”

当我们向服务器请求数据的时候&#xff0c;服务器会给我们一个反馈&#xff0c;告诉我们对待我们的请求&#xff0c;服务器处理得怎么样了&#xff0c;而这个反馈&#xff0c;是通过数字来传达的&#xff0c;这个数字就叫状态码。 状态码分为以下几种&#xff1a; 1xx&#xf…

哪个更好的选择:克隆或复制构造函数?

这就是我开始撰写本文的方式。 我已经读过很多次这样的声明&#xff1a; “当对象引用可变的最终字段时&#xff0c;克隆变得很困难。” 每次我在Google上搜索它时&#xff0c;都要了解它的确切含义&#xff0c;并且在此过程中也忘了它。 因此以为我会在此撰写博客&#xff0c;…

Fiddler教程--简介

1、开发环境host配置自己修改系统的host来回挺麻烦的 2、前后的接口调试 3、线上bugfix 4、性能分析和优化 5.等等... 工作原理 一个代理服务器地址改为 127.0.0.1:8888流模式边走边返回缓冲模式http请求完成所有的数据之后&#xff0c;才返回 界面功能介绍 1.工具栏 从下图红色…

java map是有序的吗_Java:如何初始化和填充最终的静态有序Map?

我在Java中有一个词干算法,它需要一个静态的最终HashMap< String,String>预先填写了大约30 000条记录.我需要地图按照插入的顺序保存记录(我得到一个提示,我可以使用LinkedHashMap&#xff1f;).我以为我可以在Java类文件中手动插入值,因为这是在RAM中加载它们的最快方法…

跟面向对象卯上了,看看ES6的“类”

上回我们说到ES5的面向对象&#xff0c;以及被大家公认的最佳的寄生组合式继承。时代在进步&#xff0c;在ES6中对于面向对象这个大boss理所应当地进行了一次大改&#xff0c;从原先那种比较长的写法转变为“小清新”写法。我们一起来看一下。 在ES6中是有类这个概念&#xff0…

js 变量作用域

例子 <script>var a "heh"function findLove(){console.log(a);function findforyou(){var a "you";console.log(a);}function findother(){console.log(a)}findforyou();findother();}findLove(); </script> 输出 heh you heh 例子 <scri…

Jin Ge Jin Qu hao UVA - 12563 01背包

题目&#xff1a;题目链接 思路&#xff1a;由于t最大值其实只有180 * 50 678&#xff0c;可以直接当成01背包来做&#xff0c;需要考虑的量有两个&#xff0c;时间和歌曲数&#xff0c;其中歌曲优先级大于时间&#xff0c;于是我们将歌曲数作为背包收益&#xff0c;用时间作为…

Java 8中的5个功能将改变您的编码方式

Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版&#xff0c;但实际上有数十个新功能。 许多新添加的内容在编译器&#xff0c;JVM或帮助系统级别都进行了后台改进。 这样&#xff0c;虽然我们可能会从中受…

Java相关资料分享(视频+电子书籍)

关注微信公众号【Java典籍】&#xff0c;获取百度网盘提取码 ▼微信扫一扫下图↓↓↓二维码关注 转载于:https://www.cnblogs.com/bingyimeiling/p/10279049.html

vue项目 一行js代码搞定点击图片放大缩小

一行js代码搞定xue项目需要点击图片放大缩小&#xff0c;其实主要用的是用到了vue:class的动态切换&#xff0c;内容比较简单。一开始我把维护的需求想得太复杂了&#xff0c;和测试小姐姐聊了一下才反应过来。 两个月不到跟了四个项目&#xff0c;现在是维护改bug阶段&#x…

指针系统学习8-小结

1.有关指针的数据类型的小结 2.指针运算小结 一、指针变量加&#xff08;减&#xff09;一个整数,会指向上&#xff08;下&#xff09;1&#xff08;i&#xff09;个元素  例如&#xff1a;&#xff50;&#xff0b;&#xff0b;、&#xff50;&#xff0d;&#xff0d;、&am…

java项目中外接扫描仪无法使用_java – 扫描仪行不可用错误

我用两种不同的方法从两个不同的扫描仪对象调用Scanner.nextLine()方法.有时当我从第二种方法调用Scanner.nextLine()时,它会给我一个“行不可用”错误.可能是什么问题&#xff1f;import java.util.Scanner;public class TicTacToe {private final String COMPUTER "com…

Spring集成–使用RMI通道适配器

1.引言 本文介绍了如何使用Spring Integration RMI通道适配器通过RMI发送和接收消息。 它由以下部分组成&#xff1a; 实施服务&#xff1a;第一部分着重于创建和公开服务。 实现客户端&#xff1a;显示如何使用MessagingTemplate类调用服务。 抽象SI逻辑&#xff1a;最后&a…