我们在使用Spring进行应用开发的时候Spring会对静态资源,URL路径,视图等进行统一管理,那么问题就来了,我们自己定义的资源文件都配置好了,但是有些请求是因为浏览器默认的行为,比如比较特殊的favicon.ico他会因为请求的路径是默认的应用根目录,而我们的静态资源路径是不可能映射到根路径的,因为根路径还会有很多其他的资源,如果这些资源都暴露的话会导致一些信息泄露是非常不安全的行为,所以我们也不建议这么来做,所以我们一般都是根据实际需要今天配置,哪对于这样的请求怎么处理呢?其实没有那么复杂,只不过是我们的思路太过局限了,我们先说说web应用的发展史,太过细节的知识点不在今天的说明范围,以前我们做web项目访问的资源都是资源的绝对路径,默认在根路径有个页面index,它引用了一些JS,我们怎么写,即可写引用路径也可以写绝对路径,但是我们访问系统访问页面的时候能,访问的绝对是应用的绝对路径,从根路径开始一级一级访问,知道定位了我们需要的页面,静态资源也是如此。这样做的好处是简单,但是安全性基本没有了,因为一旦知道你的首页地址,其他的地址也基本就知道了,像现代的应用都是数据驱动的,都是会有很多敏感信息在页面中的,如果我们的页面个方面随随便便就暴露了,那么对于使用应用的用户而言是非常不安全的,因为随时可能将自己的一些敏感信息暴露出去,所以为了更安全的做法是什么呢?就是拦截映射的请求,将请求转换成对应的资源,这样的话我们的资源不会字节暴露在外面,并且通过这种手段可以严格控制那些路径是应用外部可以访问的,那些是绝对不可访问的,spring的拦截器就是干这个事情的,所以我们今天说的特殊的静态资源如果资源不再默认的根路径这种情况,我们就可以通过spring的拦截机制,通过Controller来进行资源映射,是不是这么一说你就明白了,而不是网上说的各种配置页面头元信息等。既然都明白解决问题的思路了,那么我们就上代码:
@GetMapping("favicon.ico")
public String getFavion() {
return "/static/images/favicon.ico";
}