天天看點

Springboot項目如何解決跨域

1. 什麼是跨域

  要了解跨域,先要知道同源政策。同源政策是由 Netscape 公司提出的一個著名的安全政策,所有支援 JavaScript 的浏覽器都會使用這個政策。所謂同源是指:協定,域名,端口 全部相同。

  浏覽器從一個域名的網頁去請求另一個域名的資源時,​

​協定,域名,端口​

​任意不同,都會出現跨域問題。

  現實工作開發中經常會有跨域的情況。因為公司會有很多項目,也會有很多子域名,各個項目或者網站之間需要互相調用對方的資源,是以跨域請求是避免不了的

2. 解決跨域的幾種方案.

方法一:注解

  在​

​Spring Boot​

​​ 中給我們提供了一個注解 ​

​@CrossOrigin​

​ 來實作跨域,這個注解可以實作方法級别的細粒度的跨域控制。我們可以在類或者方添加該注解,如果在類上添加該注解,該類下的所有接口都可以通過跨域通路,如果在方法上添加注解,那麼僅僅隻限于加注解的方法可以通路。

示例:

@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    public Object findAll(){
        return userService.list();
    }
}      

方法二:實作 ​

​WebMvcConfigurer​

這裡可以通過實作 ​

​WebMvcConfigurer​

​​ 接口中的 ​

​addCorsMappings()​

​ 方法來實作跨域。

@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 跨域支援
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .allowedHeaders("*")
                .maxAge(3600 * 24);
    }
}      

​addMapping​

​:配置可以被跨域的路徑,可以任意配置,可以具體到直接請求路徑。

​allowedOrigins​

​:允許所有的請求域名通路我們的跨域資源,可以固定單條或者多條内容,如:“http://www.baidu.com”,隻有百度可以通路我們的跨域資源。

​allowCredentials​

​: 響應頭表示是否可以将對請求的響應暴露給頁面。傳回true則可以,其他值均不可以。

​allowedMethods​

​:允許輸入參數的請求方法通路該跨域資源伺服器,如:POST、GET、PUT、OPTIONS、DELETE等。

​allowedHeaders​

​:允許所有的請求header通路,可以自定義設定任意請求頭資訊,如:“X-YAUTH-TOKEN”。

location / {
   add_header Access-Control-Allow-Origin *;
   add_header Access-Control-Allow-Headers X-Requested-With;
   add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;

   if ($request_method = 'OPTIONS') {
     return 204;
   }
}