Jetty 9가 아닌 독립 실행 형 Jetty를 프록시로 사용하여 조사하고 있습니다. 나는 많은 곳에서 도움을 검토 한 결과 :독립 실행 형 Jetty 응용 프로그램에서 Jetty의 프록시 사용
이들의 대부분은 임베디드 부두 관련된:
이 질문은 같은 라인을 따라입니다 :
...하지만 유일한 대답은 프록시에 대한 일부 매개 변수를 다루는 페이지에 대한 링크이지만 예제 또는 다른 유용한 힌트는 없습니다. 질문에에
...는 실제로 다른 URL로 요청을 변경할 수있는 rewriteURI()
메소드를 오버라이드 (override) 부두의 ProxyServlet,의 확장을 만들었습니다. 이 사용자 정의 프록시는 Jetty가 내장되어있을 때 작동하지만 web.xml 파일과 jetty-maven-plugin을 사용하여 배포 할 전쟁을 만들면 더 이상 작동하지 않습니다.
요청을하면 응용 프로그램을 디버그하여 rewriteURI()
메서드에 들어가는 것을 볼 수 있습니다. 그러면 완료 될 때까지 실행되는 Jetty의 ProxyServlet의 service()
메서드가 호출되지만 아무 일도 일어나지 않습니다. 페이지는 하늘의 채로되어, 결국 ProxyServlet의 onResponseFailure()
가 TimeoutException, "Total timeout elapsed"와 함께 호출됩니다. 개발 도구는 504 게이트웨이 시간 초과를 수신하는 요청을 표시합니다.
일이 연결되는 방식에 뭔가 빠져있는 것처럼 보이지만 그게 무엇인지 알 수는 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 아래에 web.xml
과 맞춤 프록시 (ProxyServletExtension
)를 포함 시켰습니다.
web.xml을
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.example.ProxyServletExtension</servlet-class>
<init-param>
<param-name>maxThreads</param-name>
<param-value>1</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
ProxyServletExtension.java
...
import org.eclipse.jetty.proxy.ProxyServlet;
...
public class ProxyServletExtension extends ProxyServlet {
@Override
protected URI rewriteURI(HttpServletRequest request) {
// Forward all requests to another port on this machine
String uri = "http://localhost:8060";
// Take the current path and append it to the new url
String path = request.getRequestURI();
uri += path;
// Add query params
String query = request.getQueryString();
if (query != null && query.length() > 0) {
uri += "?" + query;
}
return URI.create(uri).normalize();
}
}