Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Archives
Today
Total
관리 메뉴

Fix you

vertx Proxy Server 구현해보기 본문

Vertx

vertx Proxy Server 구현해보기

frjufvjn 2018. 12. 7. 14:15

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