Spring-webmvc源码解析之PathResourceResolver

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 基于4.1.7.RELEASE本类是resolver链的最后一个,所以不会对resolverchain做任何操作。

基于4.1.7.RELEASE

本类是resolver链的最后一个,所以不会对resolverchain做任何操作。

private boolean isResourceUnderLocation(Resource resource, Resource location) throws IOException {
   if (!resource.getClass().equals(location.getClass())) {
      return false;
   }
   String resourcePath;
   String locationPath;
   /*  此处对上面两个path进行判断赋值,为了简洁代码已删除 */
   if (!resourcePath.startsWith(locationPath)) {
      return false;
   }
   if (resourcePath.contains("%")) {
      // Use URLDecoder (vs UriUtils) to preserve potentially decoded UTF-8 chars...
      if (URLDecoder.decode(resourcePath, "UTF-8").contains("../")) {
         if (logger.isTraceEnabled()) {
            logger.trace("Resolved resource path contains \"../\" after decoding: " + resourcePath);
         }
         return false;
      }
   }
   return true;
}

关键代码是

if (!resourcePath.startsWith(locationPath)) {
      return false;
   }

这里判断资源路径是否与所给定的location匹配,如果不匹配则返回false导致checkResource方法返回false,从而使getResource方法返回null

protected Resource getResource(String resourcePath, Resource location) throws IOException {
   Resource resource = location.createRelative(resourcePath);
   if (resource.exists() && resource.isReadable()) {
      if (checkResource(resource, location)) {
         return resource;
      }
      else if (logger.isTraceEnabled()) {
         logger.trace(“somelog");
      }
   }
   return null;
}


目录
相关文章
|
20小时前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
20小时前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
1天前
|
算法 Java 程序员
Map - TreeSet & TreeMap 源码解析
Map - TreeSet & TreeMap 源码解析
7 0
|
21天前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
1天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
3月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
105 0
|
6天前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
76 2
|
9天前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
18 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......

推荐镜像

更多