У меня есть клиентское приложение AngularJS и внутреннее приложение с пружинным упором, развернутые в одном и том же коте с одним и тем же портом, их контексты разные.Я могу получить доступ к конечным точкам весеннего отдыха из Почтальона.Но мой клиент не может получить доступ к серверу из-за политики CORS.Сообщение об ошибке:
Access to XMLHttpRequest at 'http://sbr-devp-55:8080/BackendWS/administration/getLabels' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я попробовал следующий подход: записать CORSFilter следующим образом:
public class CORSFilter implements Filter {
@Override
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, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers,"
+ " Authorization, X-Requested-With,startTime ");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {
//initialization code
}
public void destroy() {
//destroy code
}
Я написал инициализатор, как это:
public class BackendWSInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { BackendWSConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
Filter [] singleton = { new CORSFilter(),new OpenEntityManagerInViewFilter()};
return singleton;
}
}
Что еще мне нужно сделать?И почему происхождение http://localhost:8080? Не http://sbr -devp-55: 8080 ?Должен ли я что-то делать на стороне AngularJS?И как ни странно, это работает без каких-либо проблем с CORS на компьютере другого разработчика. Может ли это быть проблемой с сертификатом?Сообщение об ошибке не указывает на такую вещь.
Вот как оно отображается в консоли F12>:
POST http://sbr-devp-55:8080/BackendWS/administration/getLabels 404 (Not Found)
localization.js:108 {data: "", status: 404, headers: ƒ, config: {…}, statusText: "Not Found"}
config: data: {clientId: 92, projectId: 334, languageId: 1, userId: -1}
headers: {Content-Type: "application/json;", Accept: "application/json;", startTime: 1557157292135}method: "POST"
paramSerializer: ƒ ngParamSerializer(params)timeout: 600000
transformRequest: [ƒ]transformResponse: [ƒ]
url: "http://SBR-DEVP-55:8080/BackendWS/administration/getLabels"
__proto__: Objectdata: ""headers: ƒ (name)status: 404statusText: "Not Found"__proto__: Object