如何在springMVC中利用歌珥实现跨域

  介绍

这期内容当中小编将会给大家带来有关如何在springMVC中利用歌珥实现跨域,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

名词解释:跨域资源共享(跨源资源共享)

简单说就是只要协议,IP, http方法任意一个不同就是跨域。

4.2 spring MVC自开始添加了跨域的支持。

跨域具体的定义请移步mozilla查看

<强>使用案例

& lt; filter>   & lt; filter-name> cors   & lt; filter-class> org.springframework.web.filter.CorsFilter   & lt;/filter>   & lt; filter-mapping>   & lt; filter-name> cors   & lt; url-pattern>/* & lt;/url-pattern>   & lt;/filter-mapping>

//简单配置,未配置的均使用默认值,就是全面放的开
  & lt; mvc: cors>
  & lt; mvc:=映射路径“/* *”;/比;
  & lt;/mvc: cors>//这是一个全量配置
  & lt; mvc: cors>
  & lt; mvc:=映射路径“/api/* *”;
  allowed-origins=? http://domain1.com, http://domain2.com"
  PUT" allowed-methods=暗玫?
  allowed-headers=癶eader1, header2 header3"
  exposed-headers=癶eader1 header2"allow-credentials=癴alse"
  信息=?23”;/比;
  & lt; mvc:=映射路径“/资源/* *”;
  allowed-origins=癶ttp://domain1.com"/比;
  & lt;/mvc: cors>
  

 @CrossOrigin (maxAge=3600)
  @RestController
  @RequestMapping (“/account")
  公开课AccountController {
  @CrossOrigin (“http://domain2.com")
  @RequestMapping (“/{id}“)
  公共帐户检索(@PathVariable长id) {//?
  }
  }

<强>涉及概念

    <李> CorsConfiguration具体封装跨域配置信息的pojo李 <>李CorsConfigurationSource请求与跨域配置信息映射的容器 <李> CorsProcessor具体进行跨域操作的类 <李>诺干跨域配置信息初始化类李 <李>诺干跨域使用的适配器李

<强>涉及的java类:

CorsConfiguration

CorsConfigurationSource, UrlBasedCorsConfigurationSource

CorsProcessor, DefaultCorsProcessor

CorsFilter

AbstractHandlerMapping,包括内部类PreFlightHandler, CorsInterceptor

AbstractHandlerMethodMapping, RequestMappingHandlerMapping

CorsBeanDefinitionParser

MvcNamespaceUtils

<强>调试分析

要看懂代码我们需要先了解下封装跨域信息的pojo, CorsConfiguration

这边是一个非常简单的pojo,除了跨域对应的几个属性,就只有结合,checkOrigin, checkHttpMethod checkHeaders。

属性都是多值组合使用的。

//CorsConfiguration
  公共静态最终字符串所有=?”;//允许的请求源
  私人ListallowedOrigins;//允许的http方法
  私人ListallowedMethods;//允许的请求头
  私人ListallowedHeaders;//返回的响应头
  私人ListexposedHeaders;//是否允许携带饼干
  私人布尔allowCredentials;//预请求的存活有效期
  私人长maxAge; 

结合是将跨域信息进行合并

3个检查方法分别是核中对请求的信息是否包含在允许范围内

在系统启动时通过CorsBeanDefinitionParser解析配置文件;

加载RequestMappingHandlerMapping时,通过InitializingBean的afterProperties的钩子调用initCorsConfiguration初始化注解信息;

在CorsBeanDefinitionParser类的解析方法中打一个断点。

如何在springMVC中利用歌珥实现跨域

如何在springMVC中利用歌珥实现跨域

CorsBeanDefinitionParser的调用栈

通过代码可以看到这边解析

跨域信息的配置可以以路径为单位定义多个映射关系。

解析时如果没有定义则使用默认设置

//CorsBeanDefinitionParser
  如果(mappings.isEmpty ()) {//最简配置时的默认设置
  CorsConfiguration配置=new CorsConfiguration ();
  config.setAllowedOrigins (DEFAULT_ALLOWED_ORIGINS);
  config.setAllowedMethods (DEFAULT_ALLOWED_METHODS);
  config.setAllowedHeaders (DEFAULT_ALLOWED_HEADERS);
  config.setAllowCredentials (DEFAULT_ALLOW_CREDENTIALS);
  config.setMaxAge (DEFAULT_MAX_AGE);
  corsConfigurations.put(“/* *”,配置);
  其他}{//单个映射的处理
  (元素映射:映射){
  CorsConfiguration配置=new CorsConfiguration ();
  如果(mapping.hasAttribute (“allowed-origins")) {
  String [] allowedOrigins=StringUtils.tokenizeToStringArray (mapping.getAttribute (“allowed-origins")“,“);
  config.setAllowedOrigins (arrays . aslist (allowedOrigins));
  }//?
  }

如何在springMVC中利用歌珥实现跨域