您现在的位置是:首页 >学无止境 >springboot项目访问静态资源,控制静态资源访问权限/springboot识别静态资源请求网站首页学无止境

springboot项目访问静态资源,控制静态资源访问权限/springboot识别静态资源请求

尼可克 2026-02-27 00:01:05
简介springboot项目访问静态资源,控制静态资源访问权限/springboot识别静态资源请求

1.哪些资源会被识别成静态资源

在默认情况下,以下四个目录中的文件会被映射成静态资源;/META-INF/resources/, /resources/, /static/, /public/,这四个位置是硬编码到源码中的
在这里插入图片描述
我们也可以在配置文件中自定义静态资源目录,添加自定义目录后,只有自定义目录下的文件会被映射成静态资源
在这里插入图片描述

2.如何访问静态资源

直接在项目访问路径后加上想要访问的静态资源文件名即可;如果静态资源访问路径与动态资源(一般指controller)访问路径相同,会匹配到动态资源而不是静态资源(稍后末尾进行解析)
在这里插入图片描述

3.控制静态资源访问权限

通常情况下,我们都是在拦截器中根据请求头中携带的身份信息实现身份/权限校验;但是拦截器需要指定拦截的请求路径,而静态资源可以直接使用文件名进行访问,显然没办法添加一个统一的拦截路径(当然,也可以为每一个静态资源添加一个拦截路径)拦截所有静态资源请求;如果粗暴的拦截所有请求(/**),这显然是不友好的,而且在拦截器中也无法判断一个请求访问的是动态还是静态资源。
我们可以为所有的静态资源添加一个统一的访问路径,这样就能很好的拦截访问静态资源的请求了。
配置静态资源访问路径

访问静态资源
在这里插入图片描述
添加拦截器
在这里插入图片描述
在这里插入图片描述

4. 禁用静态资源映射

如果不想静态资源被外部访问,只需要在配置文件中关闭静态资源映射即可
在这里插入图片描述

5.通过代码添加静态资源映射

除了在配置文件中配置静态资源映射的方式,也可以通过代码的方式注册静态资源映射,两种方式互不影响,即使在配置文件中禁用了静态资源映射,通过代码方式添加静态资源映射也会生效。
在这里插入图片描述
代码方式添加映射
在这里插入图片描述
在这里插入图片描述

6.springboot怎么区分一个请求是访问动态还是静态资源

总的来说springboot没法区分一个请求是访问动态/静态资源,对于每个请求,spring都会根据url匹配对应的handler,会优先匹配动态资源(controller)对应的handler,如果没匹配上,再匹配静态资源handler,如果都没匹配上,返回404。源码解析:

  • 首先进入DispatcherServlet中的doDispatch方法,所有未被filter过滤掉的请求,都会进到这个方法中,再分配到对应的处理器。
    在这里插入图片描述
    在这里插入图片描述
  • 我们可以打个断点,验证下各个映射器在handlerMappings中的排序情况
    在这里插入图片描述
  • 查看各个映射器的注册顺序
    SimpleUrlHandlerMapping在这里插入图片描述
    在这里插入图片描述
    RequestMappingHandlerMapping
    在这里插入图片描述
    接下来我们再看下HandlerMapping的排序规则
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    完毕。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。