梦入琼楼寒有月,行过石树冻无烟

Spring security 跨域与CORS

跨域即分为三种,分别为协议跨域、主机跨域、端口跨域等,其中主要根据协议不同、域名不同、端口不同,在这三种之中只要有一个不同,就算是跨域。就比如你访问 http://pv.zsun.org.cn,然后还访问了https://pv.zsun.org.cn/这就对应了跨域中的协议不同,一个时http协议另一个则是https协议,所以造成了跨域。为了解决跨域的问题,其中主要包括了JSONP、NGINX转发、CORS等,其中JSONP和CORS都需要后端进行参与。

CORS

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一个系统,他由一系列的传输HTTP头组成,这些HTTP头将会决定浏览器是否阻止前端JavaScript代码来获取请求相应,同源安全策略是默认阻止“跨域”请求,但是如果使用CORS则会给web服务器一个选择、允许和拒绝请求访问到他们的资源。

就比如Origin来发起请求域:

  1. Access-Control-Request-Method:将要发起跨域请求的方式(POST/GET……)
  2. Access-Control-Request-Headers:将要发起跨域请求中包含的请求头字段
    1. 服务器在响应字段中来表明是否允许这个跨域请求,浏览器收到后如果检测到不合要求,就会拒绝后面的请求
  3. Access-Control-Allow-Origin:允许那些域来访问
    1. *表示所有的域请求
  4. Access-Control-Allow-Method:允许那些请求方式
  5. Access-Control-Allow-Headers:允许那些请求头字段
  6. Access-Control-Credentials:是否允许携带Cookie

Spring security 实现CORS

CrossOrigin

DemoApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class DemoApplication {

@GetMapping("/")
@CrossOrigin(origins = "http://localhost:8080")
public String index() {
return "The is Spring security world!";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

WebMvcConfigurerAdapter

WebCorsConfig.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebCorsConfig {
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
/*
addMapping 所有域都能访问
allowedOrigins 那些域可以被访问
allowedMethods 允许那些请求
allowedHeaders 允许那些请求字段
allowCredentials 是否允许携带Cookie
*/
registry.addMapping("/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("POST","GET")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
}
⬅️ Go back