2017-10-07 4 views
0

저는 REST API를 사용하여 Camunda 프로세스와 상호 작용하는 Angular 4 앱을 빌드하고 있습니다. 로그인 시도 중 CORS 오류가 발생했습니다.도커 컨테이너 내부에서 Tomcat에 액세스 할 때 CORS 오류가 발생했습니다.

Dockerfile :

http://localhost:8080/camunda/api/admin/auth/user/default/login/tasklist로드 할 수 없습니다 : 없음 '액세스를 제어-Allow- 콘솔에서

docker build -t camunda-eval . 
docker run -d --name camunda -p 8080:8080 <image> 

오류 :

FROM camunda/camunda-bpm-platform:tomcat-latest 

ADD sample.war /camunda/webapps/sample.war 

COPY ./web.xml /camunda/webapps/engine-rest/WEB-INF 

처럼 그것을 실행 원본 '헤더가 요청 된 리소스에 있습니다. ce. 따라서 'http://localhost:4200'의 출처는 허용되지 않습니다. .

내 web.xml 파일은 다음과 같습니다 :이 문제를 해결하는 방법에 대한

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <filter> 
    <filter-name>EmptyBodyFilter</filter-name> 
    <filter-class>org.camunda.bpm.engine.rest.filter.EmptyBodyFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>EmptyBodyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter> 
    <filter-name>CacheControlFilter</filter-name> 
    <filter-class>org.camunda.bpm.engine.rest.filter.CacheControlFilter</filter-class>  
    </filter> 
    <filter-mapping> 
    <filter-name>CacheControlFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <!-- Http Basic Authentication Filter --> 
    <!-- <filter> 
    <filter-name>camunda-auth</filter-name> 
    <filter-class> 
     org.camunda.bpm.engine.rest.security.auth.ProcessEngineAuthenticationFilter 
    </filter-class> 
    <init-param> 
     <param-name>authentication-provider</param-name> 
     <param-value>org.camunda.bpm.engine.rest.security.auth.impl.HttpBasicAuthenticationProvider</param-value> 
    </init-param> 
    <init-param> 
     <param-name>rest-url-pattern-prefix</param-name> 
     <param-value></param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
    <filter-name>camunda-auth</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> --> 

    <filter> 
     <filter-name>Resteasy</filter-name> 
     <filter-class> 
      org.jboss.resteasy.plugins.server.servlet.FilterDispatcher 
     </filter-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>org.camunda.bpm.engine.rest.impl.application.DefaultApplication</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>Resteasy</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>*</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.support.credentials</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
    </init-param> 
</filter> 
    <filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

어떤 아이디어?

답변

1

CORS의 경우 "localhost : 4200"과 "localhost : 8080"이 같은 시스템이 아니기 때문에이 오류가 발생합니다. 일반적으로

, 당신이 이것을 피하기 위해 3 가지 방법이 있습니다

  1. 단지 CORS를 무시하도록 브라우저에게 (예 : chromium-browser --disable-web-security --user-data-dir 용) - 이것은 당신이 단지 주위를 재생하려면 가장 빠른이지만, 물론 어떤 생산 솔루션
  2. 4200에서 액세스 할 수 있도록 CORS 헤더를 8080에 설정하십시오. 여기에 해당되지 않습니다 (Camunda-app를 제어하지 않으므로 쉽게)
  3. "에지"(또는 "게이트웨이") 서버를 사용합니다. 역방향 프록시를 통해 요청을 내부적으로 다시 라우팅합니다. 의미 : 귀하의 브라우저는 게이트웨이 (80 번 포트라고 말함)와 만 대화하며이 요청은 작업 목록 (4200) 또는 캠든 (8080) 중 하나에 연결됩니다. 이것은 이것을 해결하는 표준 방법이며 nginx 나 zuul을 찾으면 좋은 문서를 찾을 수 있습니다. 그러나 추가 서비스 구성 요소가 필요합니다.