2011-03-23 9 views
6

JavaScript 클라이언트 (시스템 A에서 실행 중)에서 웹 서버 (시스템 B에서 실행 중)로 AJAX 호출을합니다. 클라이언트는 RESTful 웹 서비스 (뉴저지)에 의해 노출 된 URL에 액세스하려고, 그것은 오류로 차단 : 서버에서"Access-Control-Allow-Origin : *"은 REST 웹 서비스에 영향을주지 않습니다.

Origin http://localhost/ is not allowed by Access-Control-Allow-Origin

나는 모든 클라이언트에 대한 액세스를 허용 2 헤더 매개 변수를 추가했다. 그러나 그것은 도움이되지 않았다 :

@Context 
private HttpServletResponse servlerResponse; 

@POST 
@Path("testme") 
public void test(){ 
    servlerResponse.addHeader("Access-Control-Allow-Origin", "*"); 
    servlerResponse.addHeader("Access-Control-Allow-Credentials", "true"); 
} 

같은 헤더

는 JSP의 경우 일 :

<% 
    response.addHeader("Access-Control-Allow-Origin", "*"); 
    response.addHeader("Access-Control-Allow-Credentials", "true"); 
%> 
<html> 
<head><title>test jsp</title></head> 
<body> 
test 
</body> 
</html> 

내가 뭔가를 놓치고 있습니까?

감사

PS 클라이언트 부분은 다음과 같습니다

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, java.io.IOException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) resp; 

    // This should be added in response to both the preflight and the actual request 
    response.addHeader("Access-Control-Allow-Origin", "*"); 

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { 
     response.addHeader("Access-Control-Allow-Credentials", "true"); 
    } 

    chain.doFilter(req, resp); 
} 
+0

XmlHttpRequest 클라이언트 코드는 어떤 모양입니까? POST를 사용하고 있습니까? 서블릿은 POST 전용으로 구성된 것처럼 보입니다. – monsur

+0

내 클라이언트가 POST를 사용 중입니다. – lili

+2

해결책 찾기 : 모든 응답에 필요한 헤더를 추가하는 필터를 구성하십시오. – lili

답변

6

, 우리는 모든 응답에 필요한 헤더를 추가 javax.servlet.Filter를 구현 이것은 응답 필터링 (Jersey 2.x)과 같은 일을하는 내 선호하는 방법입니다.

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext, 
      ContainerResponseContext responseContext) throws IOException { 

     responseContext.getHeaders().add("Access-Control-Allow-Origin", "*"); 
    } 
} 
+0

하지만 아약스를 통해 서비스를 다시 호출 할 때 오류가 발생합니다. – Kumar

+0

@Kumar, 아악스를 통해 오류를 수정 하시겠습니까? – Sergey

+0

@ Sergey 네, 저기 ...이 링크를 참조하십시오 .http : //stackoverflow.com/questions/21178823/jqery-call-of-java-rest-service-not-working-cors Thanks.Kumar Shorav – Kumar

3

@epeleg : 솔루션으로

$.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/login/testme", 
    dataType: 'json', 
    success: onLoginSuccess, 
    error: onLoginError 
}); 
관련 문제