跨域问题
- (1)什么是跨域
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 - (2)为什么会出现跨域
出于浏览器的同源策略限制
同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能
同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
http://localhost:8001
http://localhost:8002
所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
跨域问题解决办法
- (1)直接采用SpringBoot的注解@CrossOrigin
Controller层在需要跨域的类或者方法上加上该注解即可 - (2)采用过滤器的方式
@CrossOrigin
@CrossOrigin
public class UserController
Filter
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
@Component
@Slf4j
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "PUT,POST, GET, OPTIONS, DELETE, HEAD");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
chain.doFilter(req, res);
log.info("filter");
}
public void init(FilterConfig filterConfig) {
}
public void destroy() {
}
}