찾아봤던 거 기록
보안 관련해서 방화벽이나 클라우드로 운영하는 경우 클라이언트의 원 IP주소를 가져올 수 없다.
출처 : https://linked2ev.github.io/java/2019/05/22/JAVA-1.-java-get-clientIP/
try{
String clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
if( clientIp == null
|| clientIp.length() == 0
|| clientIp.toLowerCase().equals("unknown")){
clientIp = request.getHeader("REMOTE_ADDR");
}
if( clientIp == null
|| clientIp.length() == 0
|| clientIp.toLowerCase().equals("unknown")){
clientIp = request.getRemoteAddr();
}
X-Forwarded-For(XFF) 란?
XFF는 HTTP Header 중 하나로 HTTP Server에 요청한 Client의 IP를 식별하기 위한 표준이다.
X-Forwarded-For 헤더에는 프록시와 같은 아이피도 들어있지만 맨 첫번째에 실제 클라이언트의 아이피가 들어가 있기 때문에 클라이언트의 아이피를 확인할 때 먼저 X-Forwarded-For헤더가 있는지 확인한 후 없을 경우에 위의 코드에서 사용한 request.getRemoteAddr()로 IP를 얻으면 됩니다.
출처 : https://admm.tistory.com/80
WAS는 보통 2차 방화벽 안에 있고 Web Server 를 통해 client 에서 호출되거나 cluster로 구성되어 load balancer 에서 호출되는데 이럴 경우에서 getRemoteAddr() 을 호출하면 웹서버나 load balancer의 IP 가 나옴
위와 같은 문제를 해결하기 위해 사용되는 HTTP Header 인 X-Forwarded-For 값을 확인해서 있으면 이걸 사용하고 없으면 getRemoteAddr() 사용
출처 : https://www.lesstif.com/java/spring-client-ip-18220218.html
=>
'HTTP_X_FORWARDED_FOR'나 'REMOTE_ADDR' 헤더가 있을 경우 이걸 사용하고, 없으면 getRemoteAddr()를 사용해 IP를 가져온다.
....
'기록 > Java&Spring&Eclipse' 카테고리의 다른 글
[Java] String StringBuilder 차이 - StringBuilder 사용하는 이유 (0) | 2022.10.31 |
---|---|
[Java] import java.util cannot be resolved (0) | 2022.10.27 |
[Java/Spring] 스프링 어노테이션 @RestController, @Value (0) | 2022.10.27 |
[Java] 마지막 쉼표 없이 변수 사이사이에 쉼표 넣어서 String 만들기 (0) | 2022.10.19 |
[Java] 자바 cannot make a static reference to the non-static field 오류 (0) | 2022.10.12 |