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 대신 인스턴스를 반환했습니다. 아무 도움이되지 않습니다.
로그인 페이지가 표시되면 문제가 스프링 보안과 관련이있는 것으로 보입니다. – vzamanillo
이 주석을 사용하십시오. @ @ CrossOrigin' – Srinivasu