文章目录
1.什么是跨域
2.为什么产生跨域
3.怎么解决跨域
4代码解析
说明
我们在开发过程中经常会遇到前后端分离而导致的跨域问题,导致无法获取返回结果。跨域就像分离前端和后端的一道鸿沟,君在这边,她在那边,两两不能往来.
1.什么是跨域
跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于JavaScript所定义的安全限制策略。
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
2.为什么产生跨域
出现跨域问题的主要原因是同源策略的限制。同源策略是浏览器的一种安全策略,它要求 Web 应用程序只能访问与当前页面具有相同协议、主机名和端口号的资源。
如果 Web 应用程序需要访问不同源的资源,就需要进行跨域请求。但由于同源策略的限制,浏览器不允许跨域请求。这是因为跨域请求可能会导致一些安全问题,例如 CSRF(跨站请求伪造)攻击。
3.怎么解决跨域
在java中解决跨域问题,有多种方法可供选择,以下是其中两种常用的方法:
- 使用CORS(Cross-Origin Resource Sharing)解决跨域问题。
- 使用JSONP(JSON with Padding)解决跨域问题。
- 使用@CrossOrigin注解跨域。
- 实现WebMvcConfigurer接口设置跨域
4.代码解析
使用CORS(Cross-Origin Resource Sharing)解决跨域问题。
CORS是一种机制,它可以让Web应用程序在浏览器上绕过同源策略,从而允许跨域访问资源。在java中使用CORS可以通过在响应头中设置Access-Control-Allow-Origin来实现。
例如:
response.setHeader("Access-Control-Allow-Origin","*");
使用JSONP(JSON with Padding)解决跨域问题。
JSONP是一种利用script标签进行跨域访问的技术。在java中使用JSONP可以通过在响应中返回一个函数的调用,而不是纯JSON数据来实现。
例如:
String callback = request.getParameter("callback");
response.getWriter().write(callback + "(" + json + ")");
使用@CrossOrigin注解跨域,该注解可以修饰类和方法。设置简单,但需要为所有类或方法都加上注解。
例如:
@RestController
@CrossOrigin(origins = "*")
public class TestController {
@RequestMapping("/test")
public String test() {
return "测试@CrossOrigin解决跨域问题";
}
}
通过实现WebMvcConfigurer接口里的addCorsMappings方法设置跨域。
例如:
@Configuration
public class CrosFilter implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");
}
}