8443 numaralı bağlantı noktasında çalışan bir Spring Boot uygulamasına ve 8080 numaralı bağlantı noktasında angular2 tabanlı bir ön uça sahip oldum. İlk sunucuma istek göndermek için ön uçuma ihtiyacım var, ancak CORS hatalarını alıyorum ve doğru. Benim RestController yöntemine @CrossOrigin
ek açıklama ekledik ve benim proje için bir CORSFilter ekledik ve web.xml
üzerine eşledikten, ancak Firefox 46.0a2 üzerinde hala konsolda bu hatayı alıyorum:CORS issue Spring Boot ile
Çapraz Kökeni İstek Engellendi: Aynı Orijinal Politikası, uzaktan kaynağını https://localhost:8443/allEquips numaralı telefondan okumaya izin vermez. (Neden: CORS başlığı 'Erişim-Denetim-İzin-Kökeni' eksik).
benim denetleyicisi ilgili kısmı:
@CrossOrigin
@RequestMapping("/allequips")
List<String> allequips(Model model) {
List<String> codes = equipmentRepository.findAllEquipments();
return codes;
}
CORSFilter:
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
üzerinde haritalama:
<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>
Ve bu bilmiyorum önemlidir, ancak https yapan Angular2 kodu p talep:
@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);
}
}
Bazı yapılandırmaları kaçırıyor muyum? Kodum yanlış mı?
DÜZENLEME: Bir önceki işlemden vazgeçtim ve yeniden başlattım. Bundan sonra, sadece @Cross-Origin
eklenmesi yeterliydi.