2009-07-15 6 views
2

나는 레거시 애플리케이션 중 하나에서 컨텐츠를 가져오고 싶지만 "www.somehostname.com/someproduct/ .. 기다리는 중"을 표시하는 것을 피하기 위해 프로젝트를 진행 중입니다. . "사용자에게.자바 HTTP 프록시

동일한 서버를 가리키는 다른 도메인을 쉽게 추가 할 수 있지만 URL에 someproduct 컨텍스트 루트의 문제가 있습니다. 컨텍스트 루트를 변경하는 것은 기존 컨텍스트 루트를 참조하는 레거시 앱에 하드 코딩 된 수백 비트가 있기 때문에 옵션이 아닙니다. 내가하고 싶은 무엇

은 (/foo/bar.do 말) 다른 컨텍스트 루트에 요청을 보낼 수 있으며 실제로 /someproduct/bar.do로 이동이있다 (그러나 리디렉션하지 않고, 그래서 브라우저는 여전히 /foo/bar.do를 보여줍니다).

비슷한 URL을 작성하는 몇 가지 URL 재 작성 옵션을 발견했지만 지금까지는 모두 동일한 컨텍스트 루트로 /부터의 요청을 캐치/전달하는 것으로 제한되었습니다.

이 유형의 것을 처리하는 프로젝트가 있습니까? 우리는 weblogic 10.3 (레거시 응용 프로그램에서는 weblogic 8)을 사용하고 있습니다. 이상적으로는 새로운 앱의 일부로이를 호스팅 할 수 있지만 이전 앱에 뭔가를 추가 할 수도 있습니다.

아니면 완전히 다른 해결책이 더 좋을까요?

업데이트 : 우리는 원래 mod_rewrite 또는 이와 유사한 것으로 apace를 사용하도록 제안했지만 관리/호스팅은이 솔루션에 엄지 손가락을 둡니다. :/

업데이트 2 더 많은 정보 :

사용자가 이전 URL/컨텍스트 루트를 볼 수 인 장소에서 iframe이에 이전 응용 프로그램에서로드되는 페이지/워크 플로우해야 새로운 앱.

클라이언트가 볼 수있는 두 개의 앱 사이의 통신에는 특별한 것이 없습니다. 브라우저에서 처리하는 일반적인 오래된 HTTPS입니다.

+0

내 친구는 "TM"이라는 고양이를 갖고있었습니다. 그것은 "Trouble Maker"를 의미했습니다. :) –

+0

이것은 포크로 수프를 먹는 것과 같은 소프트웨어입니다. 관리 및 호스팅을 설득하여 Apache와 연결하십시오. 상황은 훨씬 더 견고 해지지 않습니다. 한 번 구성하면 다시 시작하거나 걱정할 필요가 없을 것입니다. 밀어! – Pablojim

+0

@Pablojim 나는이 문제에 대해 뒤로 물러났다. 그리고 그것은 여러 가지 이유로 카드에 실제로 포함되지 않는다. 그러나 우리는 두 가지 대안에 대한 작업에 대한 견적을 제시했으며 어느 누구도 귀찮게하는 것이 중요하지 않다고 판명했습니다. 우리는 같은로드 밸런서를 가리키는 또 다른 도메인 이름을 추가하기 만했습니다. 관리자는 URL에 '/ someproduct /'비트가 있으면 아파치 서버를 얻지 않고 제거하는 비용을 보았을 때 그렇게 나쁘지 않다고 결정했습니다. –

답변

2

상당히 간단한 사용자 정의 서블릿을 사용하여이 작업을 수행 할 수 있어야한다고 생각합니다. 높은 수준에서

, 당신 거라고 :

  • 단순히 요청의 pathInfo을, 서블릿의 구현에서 foo는/*
  • /같은 매핑 서블릿을지도하고를 만들기 위해 그것을 사용 레거시 사이트에 요청 (HttpUrlConnection 또는 Apache Commons 동등 물 사용).
  • 클라이언트에 응답을 파이프합니다 (헤더를 처리하기 위해 일부 처리가 필요할 수 있음).
+0

우리는이 옵션을 고려했으며 실제로 정적 파일과 비슷한 것을 수행합니다. 그러나 우리는 SSL/쿠키/SSO 등의 엣지 케이스에 물릴 것이라고 걱정하고 있습니다. 나는 대부분의 문제에 대해 이미 생각한 프로젝트를 찾고 싶습니다. 결국 무언가를 찾지 못한다면 우리는이 해결책으로 갈 것입니다. –

2

왜 프론트 웹 로직이 이냐구요.입니다.

이것은 매우 표준적인 설정이며 많은 다른 이점도 제공합니다. Apache에서의 URL 재 작성은 매우 잘 지원되며 문서는 훌륭합니다.

설치가 간단하지 않으므로 필요에 따라 동일한 상자에서 아파치를 실행할 수 있습니다.

+1

이 방법을 사용하는 것이 "올바른"방법이라고 생각하지만이 옵션을 특별히 제외하는 질문에 제약이 있으므로 허용 된 대답으로 표시 할 수 없습니다. 그러나이 제약 조건을 가지고 있지 않은 사람이라면 누구나 읽을 수 있습니다.이 옵션을 사용하십시오! –

0

클라이언트가 작동중인 API에 대해 더 많은 컨텍스트가 작동 할 수있는 해결책을 제공하는 데 도움이 될 것입니다. 레거시 Java EE 앱과 완전히 다른 완전히 새로운 API를 제공하려고하십니까? API (Servlet, EJB, REST 서비스)를 처리하는 아티팩트는 무엇입니까?

다른 엔터프라이즈 응용 프로그램에서 제공하는 API를 사용하는 경우 Pojo 클래스를 사용하여 새로운 서비스 응용 프로그램이 아닌 다른 컨텍스트 루트를 통해 도달 할 수있는 레거시 응용 프로그램의 게이트웨이로 작동한다고 가정합니다. 이 솔루션은 모든 기존 API 메소드를 알고 있다고 가정하고이를 새 API 호출에 매핑 할 수 있습니다.

어떤 메서드가 호출되는지 걱정할 필요가없는 일반적인 솔루션의 경우. 프록시 접근 방식이 실제로 작동하는지 궁금합니다.URL 재 작성을 통해 사용자 자격 증명도 레거시 시스템에 올바르게 제공됩니까? 발신자를 사용하는 대신 레거시 통화를 다른 사용자로 전환해야합니까? URL 재 작성으로 가능합니까? 안전한 컨텍스트에서 작동하는지 확실하지 않습니다.

여기에 약간의 정보를 제공 할 수 있습니다.

+0

우리가 사용하는 REST 서비스와 서블릿이 있지만 모두 서버 측이므로 URL을 숨기는 것이 문제가되지 않습니다. 그러나 문제는 새 앱의 iframe에 페이지를로드한다는 것입니다 (이전 앱은 스트럿을 사용함). –

+0

안녕하세요 TM, JackLeow는 위 질문에 대한보다 일반적인 사례를 다루는 솔루션을 추천 한 것 같습니다. 프로젝트를 검색하여 성공적 일 수 있습니다. UrlRewriteFilter을 보시기 바랍니다. 건배 Michael – marksml

+0

좋아, 다시 그냥 URL : http://tuckey.org/urlrewrite/ – marksml

0

대신 JSP 페이지를 제공하면 태그를 사용하여 요청 서버 측을 처리 할 수 ​​있습니다.

그러면 사용자는 리소스가 외부인지 알지 못합니다.

http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

+0

는 현재 웹 앱에서만 리소스를 참조 할 수 있습니다. –

1

당신이 할 수있는 것 Restlet 사용. Redirector object을 사용할 수 있습니다. 예를 들어 herehere을 참조하십시오.

+0

문서에서 링크 된 것을 알 수 없습니다.이 "리디렉터"가 리디렉션 응답을 보내나요? (이름에서 알 수 있듯이)? 이 경우 실제로 URL을 숨기지 않습니다. 아니면 실제로 원래 URL을 유지하겠습니까? –

+0

모드 설정에서 기본 설정이 가능합니다. 기본 모드는 투명 프록시처럼 동작하는 MODE_DISPATCHER입니다. – laz

+0

+1, 유망 해 보입니다. 그러나 동일한 컨텍스트의 디스패처로 요청을 전달하기 때문에 작동하지 않는 것처럼 보입니다. 내가 필요한 것은 다른 컨텍스트로 이동하는 것입니다 (핵심 비트는 여기가 동일한 컨텍스트 루트로 시작하지 않는다는 것을 보여 주려는 것입니다) –