PUT, DELETE 메소드로는 Web 서비스와 함께 원격지 웹 서버에 파일을 생성하거나 삭제하는 FTP와 유사한 기능을 구현할 수 있다.

 

그러면 get 이랑 post 만 써서 rest api 를 만들어야 되나???

Nope !

 

Url 파라미터로 _method=PUT , _method=DELETE 를 사용하고

웹서버 Filter 에서 _method 파라미터의 value값을 http method로 변경하는 spring filter 가 "HiddenHttpMethodFilterConfiguration" 이다.

 

사용은 간단하다. 아래클래스 하나 만들면 끝.

 

그러면 GET,POST 메소드만 Request 를 받도록 제한을 하려면??????

 

CorsWebFilter 를 사용하면 된다.

========================================================================

 

1
2
3
4
5
6
7
8
@Configuration 
public class HiddenHttpMethodFilterConfiguration { 
 
@Bean 
public HiddenHttpMethodFilter hiddenHttpMethodFilter() { 
    return new HiddenHttpMethodFilter(); 
   } 
}

버튼 한개당 API 를 여러개 호출할경우

 

버튼은 권한 있지만 API 는 권한관리 를 어떻게 할것인가.

 

테이블관계가 메뉴:버튼(1:N) 으로 API 별로 권한을 체크하려니 테이블 관계 버튼:API 가 (N:N) 관계가 되면서 권한 체크가 쉽지 않게 되었다. (버튼 한개에 API 한개를 호출하면 좋겠지만 MSA 프로젝트를 한다면 그럴거 같지는 않음)

 

1. '메뉴기능 테이블'에 버튼권한을 다 넣고, 거기에 모든 API 를 관리하는 테이블에 넣은후 권한을 체크.

 // API 추가시 계속 URL 을 관리해야하는 번거로움. (conference에 추가하는거나 비슷한거 같기도하고...)

 

2. URL 패턴을 관리해서 특정URL 패턴에서만 URL 권한을 체크하도록

ex) Intercepter 에서 !URL.startsWith("/uploads") 이럴때 권한 체크. 등으로 처리

 // 2번과 같이 처리하려면 시작부터 url 패턴을 정해두어야함.

API Server 앞에 NginX 를 프록시서버로 뒀을때 , API Server 에서 아무리 Header 정보 아무리 찾아봐도,

Client 정보를 알수가 없다. Nginx 가 헤더정보를 안 넘겨주기 때문이다.

 

이럴경우 Nginx 헤더 설정이 필요하다.

 

위에 언급한 Nginx 같은걸 Ingress(라우터 외부에서 라우터 내부로 유입되는 패킷을 필터링) 서버 라 부른다.

API Server 앞에 NginX 를 프록시서버로 뒀을때 , API Server 에서 아무리 Header 정보 아무리 찾아봐도,

Client 정보를 알수가 없다. Nginx 가 헤더정보를 안 넘겨주기 때문이다.

이럴경우 Nginx 헤더 설정이 필요하다.
위에 언급한 Nginx 같이 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙들의 모음을
 쿠버네티스에서는 Ingress 서버 라 부른다.
 
 Ingress로 Nginx 를 사용할경우 yaml 템플렛 annotations 부분에 아래와 같이 추가하면 클라이언트 정보를 알 수 있다.

 
metadata:
   annotations:
      proxy_set_header X-Forwarded-For $proxy_protocol_addr;
      proxy_set_header X-Real-IP $proxy_protocol_addr;

참고 : https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/

+ Recent posts