2015-06-22 2 views
0

Я использую джерси 2.18 для разработки отдыха api. (с использованием контейнера tomcat)jersey cross domain request

Я хочу разрешить доступ к клиентам из другого домена.

Так что я пытаюсь сделать код ниже, чтобы разрешать запросы на междоменные запросы.

Фильтр

public class MyCorsFilter implements Filter { 

    public MyCorsFilter() { } 

    public void init(FilterConfig fConfig) throws ServletException { } 

    public void destroy() { } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     ((HttpServletResponse)response).addHeader("Access-Control-Allow-Origin", "*"); 
     chain.doFilter(request, response); 
    } 
} 

web.xml

<filter> 
    <filter-name>MyCorsFilter</filter-name> 
    <filter-class>MyCorsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>MyCorsFilter</filter-name> 
    <url-pattern>/api/*</url-pattern> 
</filter-mapping> 

Приведенный выше код работает отлично, пока я не добавить HTTP базовую аутентификацию.

Когда я добавляю обычную проверку подлинности я получаю следующее сообщение об ошибке:

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

Когда проверяются заголовки с помощью инструментов разработчика я нашел следующее:

enter image description here

Пожалуйста, обратите внимание, что ошибка при выполнении OPTIONS метод. (Я использую метод GET)

Любое предложение о том, как добавить разрешить CORS с базовой HTTP-аутентификацией, будет оценено по достоинству.

ответ

0

Вы можете иметь Catalina CORS конфигурации фильтра в вашем web.xml, как показано ниже -

<filter> 
     <filter-name>CorsFilter</filter-name> 
     <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>CorsFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
0

Puneet прав.

Обратите внимание, вы, вероятно, придется настроить некоторые параметры, а именно:

  • cors.allowed.origins
  • cors.allowed.methods
  • cors.allowed.headers
  • cors.exposed .headers
0

На самом деле браузер выполняет предполетный запрос перед вашим запросчиком запроса с помощью метода «запроса» с запросом HTTP. так что вы должны отправить 200 OK на эту просьбу и дать заголовок Междоменное как

httpResponse.setHeader("Access-Control-Allow-Origin", "*"); 
    httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT"); 
    httpResponse.setHeader("Access-Control-Max-Age", "3600"); 
    httpResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization, Content-Type"); 
    if(httpRequest.getMethod().equals("OPTIONS")){ 
     httpResponse.setStatus(HttpServletResponse.SC_ACCEPTED); 
     return; 
    } 

Более подробную информацию вы можете найти на http://enable-cors-org/