CORS(Cross-Origin Resource Sharing)是由W3C制定的一种跨域资源共享技术标准,其目的是为了解决前端的跨域请求。再Java EE开发中,最常见的前端跨域请求解决方案是JSONP,但是JSONP只支持get请求,不支持其他请求,而CORS则支持多种请求。
例如创建一个名为cors1的Spring Boot工程,在工程下创建一个HelloController,它使用的是默认端口8080:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
因为要跨域,所以要再提供一个cors2工程,给它设置端口号为8088:
在cors2工程中创建一个index.html页面,引入jQuery,通过Ajax技术向8080端口中的hello接口发送一个请求:
启动项目后发起请求,这时我们发现请求不被允许:
加一个@CrossOrigin注解就可以解决跨域问题了
此时就可以访问了
这样是解决了跨域问题,但是这样需要在每个方法是写,很麻烦,当然也可以写在每个类上面,但是这样也还是麻烦,因此我们还可以像下面这样写:
创建一个WebMVCConfig类实现WebMVCConfigurer
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("http://localhost:8088");
}
}