产生跨域访问的情况主要是因为请求的发起者与请求的接受者1、域名不同;2、端口号不同
下面给出详细步骤:
- 如果要用到Cookie,那么需要在前端设置.withCredentials=true
- 在后端写一个配置类CorsConfig,这个类继承WebMvcConfigurerAdapter,在里面进行后台跨域请求配置。
注意: 要将
$http
中的url
的地址写完整,例如'http://localhost:8080/getExamsByPage',如果省略http://
就无法跨域,因为它代表了协议类型
下面给出相应代码
js中的配置全局$http请求的代码:
var utils = angular.module('ecnuUtils', ['ngCookies', 'ngStorage']);
utils.config(['$httpProvider', config]);
function config($httpProvider) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.headers.common = { 'Access-Control-Allow-Origin' : '*' }
}
CorsConfig的代码:
package edu.ecnu.yjsy.conf;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}