您现在的位置是:首页 >学无止境 >springboot项目访问静态资源,控制静态资源访问权限/springboot识别静态资源请求网站首页学无止境
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的排序规则



完毕。





QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结