Undertowでリバースプロキシ
WildflyのWebコンポーネントであるUndertowを使って簡単なリバースプロキシを書く。
と言っても、実はUndertowには最初からリバプロ用のHttpHandlerがあるのでそれを使うだけ。
ただリバプロだけじゃ面白くないので、リクエストヘッダに任意の文字列を付けて渡すようにしてみた。
実装
リバプロ本体。
リクエストヘッダに任意の文字列を追加した後にプロキシするように、HttpHander chainを作っている。
public class Server { public static void main(String... args) throws IOException { Undertow server; try { server = Undertow .builder() .addHttpListener(8080, "localhost") .setHandler( new SetRequestHeaderHandler(new ProxyHandler( new SimpleProxyClientProvider(new URI( "http://centos7:8080/")), 500, null, true, true), "Hoge", "hoge")).build(); server.start(); } catch (URISyntaxException e) { e.printStackTrace(); } } }
リクエストヘッダに追加するHttpHandlerは極簡単。
public class SetRequestHeaderHandler implements HttpHandler { private HttpHandler next; private HttpString header; private String value; public SetRequestHeaderHandler(HttpHandler next, String header, String value) { this.next = next; this.header = HttpString.tryFromString(header); this.value = value; } @Override public void handleRequest(HttpServerExchange exchange) throws Exception { exchange.getRequestHeaders().put(header, value); next.handleRequest(exchange); } }