2016-10-31 1 views
0

JSON 형식의 객체를 반환하는 서비스를 게시하는 자바 웹 응용 프로그램이 있으며 JSONP 호출을 통해 해당 서비스를 소비하는 다른 Java 웹 응용 프로그램이 있습니다. 응답. 내 로컬 컴퓨터에서는 잘 작동하지만 웹 환경 (Layershift 내 경우)에서 테스트하기 위해 JSON 개체를 가져올 수 없습니다. Chrome 개발자 도구에는 오류가 표시되지 않지만 네트워크 옵션의 응답 탭을 보면 내 애플리케이션의 로그인 페이지 소스 코드가 표시됩니다. 나 서비스와 당신에게 내 코드
컨트롤러를 보여 드리죠 :자바 웹 응용 프로그램이 내 로그인 페이지의 소스 코드에 응답합니다.

@RestController 
public class MyController { 
@RequestMapping(value="/myservice/get/{somevar}") 
public MappingJacksonValue getMyObject (@RequestParam String callback, @PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) { 
    MyObject obj = new MyObject(); 
    //some logic 
    MappingJacksonValue value = new MappingJacksonValue(obj); 
    value.setJsonpFunction(callback); 
    return value; 
} 

}

전화 서비스를위한 자바 스크립트 코드 :

$.fn.callWithJsonP = function(somevar) { 
var url = "/myservice/get/" + somevar + "?callback=myCallback"; 
$.getJSON(url, function(data) { 
    if (data.value.status == "OK") { 
     //shows the data contained 
    } 
}); 
} 

아파치 설정 (CORS 오류를 방지하기 위해 추가) 양쪽 응용에 존재 함

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
Header always unset X-Frame-Options 

이것은 muy 로컬 컴퓨터에서 완벽하게 작동합니다 (Apache는 제외하고 로컬로 사용하지 않습니다). 그러나 웹 환경에서 로그인 페이지의 소스 코드를받습니다. 헤더 탭에서 아파치에 추가 된 헤더를 볼 수 있으며 응답의 상태 코드는 정상적으로 진행됩니다.
종류는

UPDATE 나는 아파치 웹 서버를 제거, 심지어 우편 배달부 (의미, 아니 두 번째 응용 프로그램)와 웹 서비스를 테스트 한
, 여전히 같은 결과를 간주한다. @Controller에 대한 @RestController를 변경하고 MappingJacksonValue 대신 MappingJacksonValue 대신 인스턴스를 반환했습니다. 아무 도움이되지 않습니다.

+0

로그인 페이지가 표시되면 문제가 스프링 보안과 관련이있는 것으로 보입니다. – vzamanillo

+0

이 주석을 사용하십시오. @ @ CrossOrigin' – Srinivasu

답변

1

나는 아마 여기 떨어져있을 것이다.하지만 서블릿 필터 나 웹 애플리케이션 구성의 다른 부분이있어 REST 프레임 워크가 로그인 페이지로 맵핑하기 전에 로그인 페이지로 요청을 라우팅 할 가능성이있다. 종점? 저는 Jersey를 보통 사용하기 때문에 Spring의 RestController에 익숙하지 않습니다.하지만 비슷한 일을하고 있다고 가정합니다 - Java 코드와 일치하는 URL을 라우트합니다. 응답으로 로그인 페이지가 표시되면 Spring이 사용자의 엔드 포인트 메소드로 지시하기 전에 사용자가 강제로 로그인을 시도하고 간섭하는 것으로 들립니다.

+0

안녕하세요 @ 짐웨버, 좋은 제안, 보안 컨트롤을 가지고 있지만 보내는 요청을 잡아서는 안됩니다,하지만 내가 그것을 확인하고 알려 드리겠습니다, 안부 – maxivis

+0

감사합니다 @ 짐웨버, 마침내 그것의 작동, 서블릿이었다 필터 실패 (나는 몇 가지 오류가 있었다 : 폴더가 웹 환경에 존재하지 않고 속성 파일이로드되지 않고 JCE 라이브러리 등) 그리고 어떻게 든 로그인 페이지로 리다이렉트했다. 보안 설정이 아니라 서블릿이었다. – maxivis

+0

아, 좋은 거래 @maxivis - 다행이야. –

0

대체로 서버에 폴백이 설정되어있는 것 같습니다. 페이지 응용 프로그램. 일반적으로 각도와 같은 라우터를 사용하는 HTML5 모드로 라우팅하는 데 사용됩니다.

+0

다음과 같은 형식입니다. https://code.tutsplus.com/tutorials/using-htaccess-files-for-pretty-urls--net-6049 –

+0

안녕하세요 @ DavidMantilla, 이 기사를 살펴보고 알려 주겠다. 제안에 감사한다. – maxivis

+0

안녕하세요 @DavidMantilla, 아파치 서버를 꺼내어 여전히 동일한 응답을 얻었습니다. – maxivis

0

로그인이 실패하고 동일한 페이지로 리디렉션되기 때문에 로그인 페이지 코드가 응답으로 표시됩니다.

먼저 서비스를 호출하기 전에 인증을 수행 한 다음 인증 토큰 호출 서비스 ..

관련 문제