반응형
요청한 사용자의 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를 사용하도록 설정하면 된다.
반응형
'web > node.js' 카테고리의 다른 글
node.js에서 sharp를 사용해서 이미지 크기 변경하기 (0) | 2018.10.22 |
---|---|
maxmind의 geoLite2를 이용해서 접속한 사용자의 지역정보 가져오기 (0) | 2018.10.16 |
node.js에서 aws s3 스토리지에 이미지 저장하기 (0) | 2018.10.06 |
swagger api 보안 oauth2 설명 (0) | 2018.10.06 |
node.js 애플리케이션 프로세스 관리 도구 매니저 (2) | 2018.10.06 |