问题截图
已拦截跨源请求:同源策略禁止读取位于 http://localhost:8081/admin/info 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。状态码:200。
我是一个get请求,当我运行时
就变成了options和get两个请求
经过资料查询
前端请求会先发送一次预检请求也就是options请求,就是因为options请求让后端Security拦截器以为是一个坏地址,就拒绝了接下来真正的get地址导致了错误。
解决:
方案一(不可行,使用完就不能访问接口数据了)
在Security配置类中添加这串代码
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatchers().antMatchers(HttpMethod.OPTIONS, "/oauth/token", "/rest/**", "/api/**")
.and()
.cors()
.disable()
……; }
方案二:
在doFilterInternal
文件中加入这串代码,添加的头函数可根据自己报错的情况进行添加。
//options 跨域处理
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.addHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers",
"Content-Type, x-requested-with, X-Custom-Header, Request-Ajax");
if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
return;
}
我的控制待提示我缺少authoriza
那我就添加这串代即可
没有Access-Control-Allow-Origin
(原因:CORS 预检响应的 'Access-Control-Allow-Headers',不允许使用头 'authoriza
//options 跨域处理
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Headers",
"Authorization, Content-Type, x-requested-with, X-Custom-Header, Request-Ajax");
if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
return;
}
参考资料:
https://blog.youkuaiyun.com/qq_27158477/article/details/116034740