SpringBoot跨域加SpringSecurity就失效( 三 )
Interceptor 由 Spring 自己定义 , 由 DispatcherServlet 调用 , 可以定义在 Handler 调用前后的行为 。 这里的 Handler, 在多数情况下 , 就是我们的 Controller 中对应的方法 。
对于 Filter 和 Interceptor 的复习就到这里 , 我们只需要知道它们会在什么时候被调用到 , 就能理解后面的内容了 。
5.2 WebMvcConfigurer.addCorsMappings 方法做了什么我们从 WebMvcConfigurer.addCorsMappings 方法的参数开始 , 先看看 CORS 配置是如何保存到 Spring 上下文中的 , 然后在了解一下 Spring 是如何使用的它们 。
5.2.1 注入 CORS 配置5.2.1.1 CorsRegistry 和 CorsRegistrationWebMvcConfigurer.addCorsMappings 方法的参数 CorsRegistry 用于注册 CORS 配置 , 它的源码如下:
public class CorsRegistry {private final List
我们发现这个类仅仅有两个方法:
- addMapping 接收一个 pathPattern , 创建一个 CorsRegistration 实例 , 保存到列表后将其返回 。 在我们的代码中 , 这里的 pathPattern 就是 /hello 。
- getCorsConfigurations 方法将保存的 CORS 规则转换成 Map 后返回 。
public class CorsRegistration {private final String pathPattern;private final CorsConfiguration config;public CorsRegistration(String pathPattern) {this.pathPattern = pathPattern;this.config = new CorsConfiguration().applyPermitDefaultValues();}public CorsRegistration allowedOrigins(String... origins) {this.config.setAllowedOrigins(Arrays.asList(origins));return this;}}
不难发现 , 这个类仅仅保存了一个 pathPattern 字符串和 CorsConfiguration , 很好理解 , 它保存的是一个 pathPattern 对应的 CORS 规则 。在它的构造函数中 , 调用的 CorsConfiguration.applyPermitDefaultValues 方法则用于配置默认的 CORS 规则:
- allowedOrigins 默认为所有域 。
- allowedMethods 默认为 GET 、HEAD 和 POST 。
- allowedHeaders 默认为所有 。
- maxAge 默认为 30 分钟 。
- exposedHeaders 默认为 null , 也就是不暴露任何 header 。
- credentials 默认为 null 。
现在 , 我们已经通过 WebMvcConfigurer.addCorsMappings 方法配置好 CorsRegistry 了 , 接下来看看这些配置会在什么地方被注入到 Spring 上下文中 。
5.2.1.2 WebMvcConfigurationSupportCorsRegistry.getCorsConfigurations 方法 , 会被 WebMvcConfigurationSupport.getConfigurations 方法调用 , 这个方法如下:
protected final Map getCorsConfigurations() {if (this.corsConfigurations == null) {CorsRegistry registry = new CorsRegistry();addCorsMappings(registry);this.corsConfigurations = registry.getCorsConfigurations();}return this.corsConfigurations;}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SpringBoot常用注解
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享
- 全网最深分析:SpringBoot MVC自动配置失效的原因
- SpringBoot+MyBatis+MySQL读写分离实现
- 从零手写并发框架(四)异步转同步 springboot 整合
- SpringBoot配置数据源及MyBatis分页的要点
- 刷新认知!h2database在springboot中的使用
- 「尝鲜」SpringBoot 快速整合 Swagger3.0
- SpringBoot内置http编码功能为例分析自动配置过程
- SpringBoot扫描不到组件?给你提供几种方案