spring boot CORS 跨域支持

一、简介

CORS(cross-origin resource sharing) 是W3C 制定的一种跨域资源共享技术标准。浏览器发起一个跨域请求时,首先发送一个OPTIONS 探测请求,服务器会给浏览器一个Access-Control-Allow-Origin 字段,用来记录可以访问该资源的域。浏览器接受到响应后,提取出Access-Control-Allow-Origin 字段中的值,发现该值包含当前页面所在域,就知道这个跨域是被允许的。

Access-Control-Allow-Origin 跨域请求的域
Access-Control-Allow-Methods 允许跨域的请求方式
Access-Control-Max-Age 探测请求的有效期,探测请求不用每次都发送,有效期过了之后才会再发送

二、流程

新建spring boot web 项目

1.TestController.java

package com.vincent;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	@GetMapping("/test")
	public String test(String number) {
		return number;
	}
}

2.test.html


    
        
    

    
        

该文件保存到桌面即可,使用浏览器直接打开该html 文件

点击按钮发送请求:
spring boot CORS 跨域支持_第1张图片

3.TestController /test 请求增加 @CrossOrigin 注解:
spring boot CORS 跨域支持_第2张图片

4.WebMvcConfigurer 配置cors
使用@CrossOrigin 对有很多Controller 将非常繁琐,提供配置如下:

package com.vincent;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
public class Ch3Application {

	public static void main(String[] args) {
		SpringApplication.run(Ch3Application.class, args);
	}

	@Configuration
	static class CrossOriginConfig implements WebMvcConfigurer{
		
		@Override
		public void addCorsMappings(CorsRegistry registry) {
			registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*").allowedMethods("*");
		}
	}
}

5.去除TestController /test 请求方法的@CrossOrigin 注解

spring boot CORS 跨域支持_第3张图片

三、总结

1.org.springframework.web.servlet.config.annotation.WebMvcConfigurer 定义了Spring MVC 的回调配置,用户可自定义配置相关的CORS、InterceptorHandler (拦截器) 等

2.使用Filter 返回相关响应实现跨域支持

你可能感兴趣的:(spring,boot)