天天看點

前後端分離跨域問題:SpringBoot、springmvc的@crossOrigir注解和統一跨域配置類

關于跨域問題參考我另一篇博文

https://blog.csdn.net/douxubao/article/details/105303414

https://www.jianshu.com/p/45ed27b56d55

允許跨域通路,可以用在類和方法上

有兩個屬性:

origins:指定可以跨域通路的網址

maxAge:放行時間,機關是秒

例如

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

    @CrossOrigin("http://domain2.com")
    @GetMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }

    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}
           

remove方法可以被所有網站的通路,retrieve方法隻接受http://domain2.com網站發送的請求

統一跨域配置類

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置資訊
        CorsConfiguration config = new CorsConfiguration();
        //1) 允許的域,不要寫*,否則cookie就無法使用了
        config.addAllowedOrigin("http://manage.leyou.com");
        //2) 是否發送Cookie資訊
        config.setAllowCredentials(true);
        //3) 允許的請求方式
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        // 4)允許的頭資訊
        config.addAllowedHeader("*");

        //2.添加映射路徑,我們攔截一切請求
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        //3.傳回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}
           

如果前端vue配置了proxy代理(node的正向代理伺服器轉發請求),也可以解決ajax的跨域問題