Fix you
vertx Proxy Server 구현해보기 본문
ASP .NET으로 이전에 구축된 사이트에 로그인, 인증, 권한이 아무것도 없어서
여기에 로그인, 인증, 권한을 붙여 달라는 요구사항이 있었다.
ASP는 지식이 전혀 없어서...
ASP를 건들지 않고 앞단에 Proxy Server를 두어 인증여부를 판단하는 Gateway 기능을 추가하면 되겠다는 아이디어가 생겼다.
결국 해야 되는 상황이 되면 이 아이디어를 적용해보려고 했지만 실제론 구현하지 않았다.
아이디어는 아래와 같다.
[IIS] <-----------> [Proxy Gateway Server] <-----------> [Legacy ASP .NET]
│
└ [ JWT 인증]
실제론 구현하지 않아서 Proxy Server 부분만 vertx로 간단히 테스트를 돌려봤다.
IIS 혹은 Apache나 NGINX 웹서버에 proxy 설정을 추가해주고
JWT 인증만 붙이면 될것 같은데 잘될거라고 생각한다.
추후에 미진한 부분을 더 붙여서 업데이트를 해보고 싶은데 그럴 수 있을런지 모르겠다.
참고: https://github.com/vert-x/vertx-examples/blob/master/src/raw/java/proxy/ProxyServer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package me.frjufvjn.study; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; import io.vertx.core.http.HttpClient; import io.vertx.core.http.HttpClientOptions; import io.vertx.core.http.HttpClientRequest; public class VertxProxyServer extends AbstractVerticle { @Override public void start(Future<Void> startFuture) throws Exception { System.out.println("start..." + vertx.getOrCreateContext().hashCode()); // end point server define String endPointHost = "asisasp.com"; int endPointPort = 8080; // proxy server HttpClient client = vertx.createHttpClient(new HttpClientOptions()); vertx.createHttpServer().requestHandler(req -> { System.out.println("Proxying request: " + req.uri() + ", method : " + req.method() + ", hashcode : " + vertx.getOrCreateContext().hashCode()); // end point requtest HttpClientRequest c_req = client.request(req.method(), endPointPort, endPointHost, req.uri(), c_res -> { System.out.println("Proxying response: " + c_res.statusCode()); req.response().setChunked(true); req.response().setStatusCode(c_res.statusCode()); req.response().headers().setAll(c_res.headers()); c_res.handler(data -> { // System.out.println("Proxying response body: " + data.toString("UTF-8")); // prev ISO-8859-1 req.response().write(data); }); c_res.endHandler((v) -> req.response().end()); }); c_req.setChunked(true); c_req.headers().setAll(req.headers()); req.handler(data -> { // System.out.println("Proxying request body " + data.toString("UTF-8")); // prev ISO-8859-1 c_req.write(data); }); req.endHandler((v) -> c_req.end()); }).listen(8080); } } | cs |