今天做前后端分离的项目时, 前端向后台发送请求发现报错: Access to XMLHttpRequest at ‘http://localhost:8082/doLogin’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
解决CORS跨域问题
1.SpringBoot项目解决方案:
package org.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMVC implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//本应用的所有方法都会去处理跨域请求
registry.addMapping("/**")
//允许远端访问的域名
.allowedOrigins("http://localhost:8080")
//允许请求的方法("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowedMethods("*")
//允许请求头
.allowedHeaders("*");
}
}
2.SpringBoot+Spring Security项目解决方案(在以上代码的基础上)
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
...
.cors()
.and()
...
}
延伸拓展
同源策略:
概念: 要求协议、域名以及端口要相同,才能进行请求和响应
作用: 网络请求更安全, 并且所有支持JavaScript的浏览器都支持的安全策略
如果不支持可能造成的问题
不良分子会利用登录时用户的信息进行不当操作
举例: 点击恶意链接中包含<img src="http://xxx.com/pay?xxx=xx"> , 就会把自己的重要信息泄漏.
?