报错:
p://localhost/goods/select?id=1' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这个错误通常是由于浏览器的同源策略(Same Origin Policy)引起的。解决此问题的方法是在服务器端配置跨域资源共享(CORS)头信息。
在 Spring Boot 中,可以使用@CrossOrigin
注解来为控制器方法添加跨域支持,或者在配置文件中添加全局 CORS 配置。以下是示例代码:
- 为控制器方法添加跨域支持。在控制器的方法上添加
@CrossOrigin(origins="*")
注解即可。示例代码如下:
@RestController
public class MyController {
@GetMapping("/myapi")
@CrossOrigin(origins="*")
public String handle() {
// 处理请求逻辑
}
}
在以上示例中,@CrossOrigin(origins="*")
注解允许来自任何域的请求访问该控制器方法。
- 全局 CORS 配置。在 Spring Boot 的配置文件 (例如 application.properties)中添加以下配置,以开启全局 CORS 支持:
# 允许任何域进行跨域访问
spring.mvc.cors.allowed-origins=*
以上配置允许任何域进行跨域访问,你也可以指定允许的域名,例如:
# 允许www.example.com域进行跨域访问
spring.mvc.cors.allowed-origins=https://www.example.com
以上两种方法都可以解决跨域问题。
注意:
有时必须在controller层添加
@CrossOrigin(origins="*")注解才能解决
二、在tomcat上部署javaweb项目时出现跨域问题
解决(暂未实践):
这个错误是由于浏览器的CORS策略导致的,具体原因是你的代码向另一个域(一般指端口或者协议)发送了请求,而浏览器默认情况下会拒绝这样的请求,以避免潜在的漏洞。
要解决这个问题,可以通过设置服务器响应头部来允许来自不同域的请求。在Tomcat中,可以在web.xml文件中配置过滤器,将以下代码粘贴到web.xml文件中:
<filter>
<filter-name>CORSFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其中,cors.allowed.origins参数表示允许的来源地址,*表示允许任意地址,cors.allowed.methods参数表示允许的HTTP请求方法,cors.allowed.headers参数表示允许的请求头部。
注意,这个配置会将所有的请求都允许跨域,不需要的话可以根据实际情况精细化配置。配置完成后,重启Tomcat服务器,再次尝试访问你的项目应该就不会再出现这个错误了。