私はSpringブートアプリケーションをポート8443上で実行しており、angle2ベースのフロントエンドはポート8080上で動作させています。私のフロントエンドはSpringサーバに要求する必要がありますが、そして右。私は私のRestControllerメソッドに@CrossOrigin
注釈を追加した、と私は私のプロジェクトにCORSFilterを追加した、とweb.xml
上にマッピングされますが、Firefoxの46.0a2に私はまだコンソールにこのエラーを取得する:CORSのSpringブートでの問題
クロスオリジンリクエストがブロックされました:同じオリジンポリシーにより、リモートリソース をhttps://localhost:8443/allEquipsに読み込むことができません。 (理由:CORS ヘッダー 'Access-Control-Allow-Origin'がありません)。
私のコントローラの関連部分:
@CrossOrigin
@RequestMapping("/allequips")
List<String> allequips(Model model) {
List<String> codes = equipmentRepository.findAllEquipments();
return codes;
}
CORSFilter:web.xml
上
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() {}
}
マッピング:
<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>
そして、この場合、私は知りません重要ですが、httを作成しているAngular2コードpリクエスト:
@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);
}
}
いくつかの設定がありません。私のコードはどうやって間違っていますか?
EDIT:私は前のコミットからあきらめて再開しました。その後、単に@Cross-Origin
を追加するだけで十分でした。