【发布时间】:2016-07-09 21:18:55
【问题描述】:
我有一个 Spring Boot 应用程序在端口 8443 上运行,一个基于 angular2 的前端在端口 8080 上运行。我需要我的前端向我的 Spring 服务器发出请求,但是我左右都遇到了 CORS 错误。我已经在我的 RestController 方法中添加了 @CrossOrigin 注释,并且我已经在我的项目中添加了一个 CORSFilter,并将其映射到 web.xml,但是在 Firefox 46.0a2 上我仍然在控制台上收到此错误:
跨域请求被阻止:同源策略不允许读取 https://localhost:8443/allEquips 的远程资源。 (原因:CORS 缺少标头“访问控制允许来源”)。
我的控制器的相关部分:
@CrossOrigin
@RequestMapping("/allequips")
List<String> allequips(Model model) {
List<String> codes = equipmentRepository.findAllEquipments();
return codes;
}
CORS过滤器:
public class CORSFilter 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", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
web.xml上的映射:
<filter>
<filter-name>cors</filter-name>
<filter-class>config.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我不知道这是否重要,但是发出 http 请求的 Angular2 代码:
@Injectable()
export class EquipService {
equips: Array<Equip>;
constructor(public http: Http) {
console.log('Equip service created.', http);
}
getEquips() {
return this.http.get(WebServiceEndPoint+'allEquips')
.map((responseData) => {
return responseData.json();
}).map((equips: Array<any>) => {
let result: Array<Equip> = [];
if(equips) {
equips.forEach((equip) => {
result.push(new Equip(equip.code));
});
}
return result;
}).subscribe( res => this.equips = res);
}
}
我是否缺少某些配置?我的代码有什么错误吗?
编辑:我放弃并从以前的提交重新开始。之后,只需添加@Cross-Origin 就足够了。
【问题讨论】:
标签: spring firefox spring-boot cors angular