요청한 사용자의 Ip를 찾아서 로그를 남기거나 Ip 지역정보를 활용해서 geoIp를 찾아내거나 할 때 request를 요청한 사용자의 IP 주소가 필요하다.


Spring에서는 간단하게 HttpServletRequest에서 getHeader의 X-FORWARDED-FOR에 있는 정보를 가져오거나 getRemoteAddr()을 통해 가져올 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * 주문요청.
 *
 * @param req the req
 * @return the response entity
*/
@PostMapping(value = "/order")
public ResponseEntity<?> order(@Valid @RequestBody OrderRequestDto req, HttpServletRequest request) {
    String ip = request.getHeader("X-FORWARDED-FOR");
    if (ip == null)
        ip = request.getRemoteAddr();
 
    return ResponseEntity.ok(orderService.order(req));
}
cs


우선 헤더에서 X-FORWARDED-FOR에서 왜 아이피 정보를 찾는건가? 대부분의 사용자 요청이 오면 사용자 요청은 Load Balance등을 통해서 오게되기 때문에 원천 아이피를 찾을 수 없기 때무에 X-FORWARDED-FOR에 원천 아이피를 넣어서 전송한다.

결론은 XFF는 HTTP Header 중 하나로 HTPP Server에 요청한 Client의 IP를 식별하기 위한 표준이다.

참고 : http://blog.plura.io/?p=6597


그럼 node.js에서는 어떻게 가져와야 하나? 아주 간단하다.

1
const ip = req.headers['x-forwarded-for'||  req.connection.remoteAddress;
cs


그리고 만약 로컬에서 ::1로 사용자 IP가 출력되는 경우가 있다. ::1은 IpV6에서 로컬 호스트를 의미한다. 그래서 express 서버를 생성할 때 IPV4를 사용하도록 설정하면 된다.


+ Recent posts