Включить запросы CORS на Java JAX-RS API на Heroku - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть веб-приложение на Java, куда я отправляю некоторые запросы из jQuery в API отдыха, настроенный с помощью JAX-RS, на моей локальной машине оно работает отлично, но после развертывания его на Heroku выдает ошибку

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at...

В частности, я отправляю запрос POST от jQuery к этой конечной точке.

Я также настроил фильтр CORS для своего приложения, что заставило его работать на моем локальном компьютере (перед выполнениемэто приложение дало мне ту же ошибку на моей локальной машине).В любом случае, вот как я его настроил

@Provider
public class CORSFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
    responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
    responseContext.getHeaders().add("Access-Control-Allow-Headers",
            "Location, origin, content-type, accept, authorization, enctype, content-disposition");
    responseContext.getHeaders().add("Access-Control-Expose-Headers", "Location");
    responseContext.getHeaders().add("Access-Control-Allow-Methods",
            "GET, POST, PUT, DELETE, OPTIONS, HEAD");
}

}

Я также пытался добавить эти заголовки к объекту Response, который я возвращаю как ответ на запрос, но безудачи.

Я полагаю, что это что-то вроде Heroku, но я не уверен.

Будет оказана любая помощь.

1 Ответ

0 голосов
/ 20 марта 2019

Использовать обычный фильтр:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class CORSFilter implements Filter {

  private static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
  private static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
  private static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers";
  private static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
  private static final String ALL = "*";
  private static final String ALLOWED_METHODS = "GET";
  private static final String ALLOWED_HEADERS =
      "origin, content-type, accept, Authorization, x-requested-with";
  private static final String EXPOSE_HEADERS = "TEST";

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    HttpServletResponse sresponse = (HttpServletResponse) response;
    sresponse.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, ALL);
    sresponse.setHeader(ACCESS_CONTROL_ALLOW_METHODS, ALLOWED_METHODS);
    sresponse.setHeader(ACCESS_CONTROL_ALLOW_HEADERS, ALLOWED_HEADERS);
    sresponse.setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, EXPOSE_HEADERS);
    chain.doFilter(request, response);
  }

  public void init(FilterConfig filterConfig) {}

  public void destroy() {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...