티스토리 뷰

program

Spring 에서 client ip 가져오는 법.

littlecarbb 2019. 3. 19. 17:17
  1. HttpServletRequest 의 getRemoteAddr() 를 호출하면 되므로  RequestContextHolder 를 통해 HttpServletRequest 획득

  2. WAS 는 보통 2차 방화벽 안에 있고 Web Server 를 통해 client 에서 호출되거나 cluster로 구성되어 load balancer 에서 호출되는데 이럴 경우에서 getRemoteAddr() 을 호출하면 웹서버나 load balancer의 IP 가 나옴
  3. 위와 같은 문제를 해결하기 위해 사용되는 HTTP Header 인 X-Forwarded-For 값을 확인해서 있으면 이걸 사용하고 없으면 getRemoteAddr() 사용

 

  
  
@Controller
public class HomeController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model model) {  
        HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
        String ip = req.getHeader("X-FORWARDED-FOR");
        if (ip == null)
            ip = req.getRemoteAddr();
         
        model.addAttribute("clientIP", ip);
        return "home";
    }
}

WebLogic 의 web server 연계 모듈인 weblogic connector 는 위 헤더를 사용하지 않고 Proxy-Client-IP 나 WL-Proxy-Client-IP 를 사용하므로 weblogic 에서 도는 application 작성시 수정이 필요함


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함