SpringBoot 前後端分離跨域及 session 不同問題

後端配置

方式1

@Configuration
public class CorsConfig {

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 是否發送Cookie信息
        corsConfiguration.setAllowCredentials(true);
        // 允許任何域名
        corsConfiguration.addAllowedOrigin(CorsConfiguration.ALL);
        // 允許任何頭部信息
        corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);
        // 允許所有請求類型
        corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);
        // 暴露哪些頭部信息(因爲跨域訪問默認不能獲取全部頭部信息)
        corsConfiguration.addExposedHeader("Authorization");
        // 添加映射路徑
        source.registerCorsConfiguration("/**", corsConfiguration);
        FilterRegistrationBean bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }

}

方式2

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 跨域請求處理的接口
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 添加映射路徑
        registry.addMapping("/**")
                //放行哪些原始域
                .allowedOrigins(CorsConfiguration.ALL)
                // 是否發送Cookie信息
                .allowCredentials(true)
                // 放行哪些原始域(請求方式)
                .allowedMethods(
                        HttpMethod.GET.name(),
                        HttpMethod.POST.name(),
                        HttpMethod.PUT.name(),
                        HttpMethod.DELETE.name()
                )
                // 放行哪些原始域(頭部信息)
                .allowedHeaders("*")
                // 暴露哪些頭部信息(因爲跨域訪問默認不能獲取全部頭部信息)
                .exposedHeaders("Authorization");
    }
}

 

前端

根據使用框架不通,設置credentials爲true

vue 語言配置方式

// 使用vue.resource發送請求時配置如下:
// main.js中
Vue.http.options.xhr = { withCredentials: true }
// 使用vue.axios發送請求時配置如下:
axios.defaults.withCredentials = true// jquery請求帶上 xhrFields: {withCredentials: true}, crossDomain: true;
$.ajax({
 type: "post",
 url: "",
 xhrFields: {withCredentials: true},
 crossDomain: true,
 data: {username:$("#username").val()},
 dataType: "json",
 success: function(data){ }
});

 

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章