CORS проблема с Spring Boot
У меня есть приложение Spring Boot, работающее на порту 8443, и внешний интерфейс на основе angular2 на порту 8080. Мне нужен мой внешний интерфейс для отправки запросов на мой сервер Spring, но я получаю ошибки CORS влево и вправо. Я добавил@CrossOrigin
аннотации к моему методу RestController, и я добавил CORSFilter в свой проект и отобразил его наweb.xml
, но на Firefox 46.0a2 я все еще получаю эту ошибку на консоли:
Блокирован перекрестный запрос: одна и та же политика происхождения запрещает чтение удаленного ресурса вhttps: // локальный: 8443 / allEquips, (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).
Соответствующая часть моего контроллера:
@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
:
<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>
И я не знаю, важно ли это, но код Angular2, который делает запрос http:
@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
было достаточно.