2009-12-30 9 views
2

나는 스프링 빈을 정의했다.스프링 빈에서 클라이언트 IP 주소를 얻는 방법

<beans> 
    <bean id="remoteService" class="edu.wustl.catissuecore.CaTissueApplictionServicImpl" /> 
</beans> 

이 클래스에 클라이언트의 IP 주소를 가져 오는 방법이 있습니까? 서블릿에서와 유사하게 request.getRemoteAddr();

+0

1.)이인가 헤더를 통해 루프입니다 webapp 또는 그냥 임의의 봄 애플 리케이션? 2.) edu.wustl.catissuecore.CaTissueApplictionServicImpl (또는 gov.nih.nci.system.comm.server.ApplicationServiceServerImpl?) *은 AbstractController를 구현하지 않지만 * 구현 한 것은 무엇입니까? 컨트롤러 자체가 아니라면, 컨트롤러 위에이 클래스에 이것을 전달할 수있는 컨트롤러가 있습니까? 3) 클래스의 Spring 설정이 이미 주요 질문에 게시되었습니다. 코드를 게시하거나 상속 계층 구조와 클래스가 상호 작용하는 다른 bean을 설명해야합니다. – Nate

답변

15

간단한 (그리고 추한) 접근 방식은 RequestContextHolder을 사용하는 것입니다

String remoteAddress = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
     .getRequest().getRemoteAddr(); 

여러분의 빈에 대한 자세한 내용을 알고이 최대 유선 어떻게하지 않으면, 그게 내가 제안 할 수있는 것이 가장 좋습니다. 빈이 컨트롤러 인 경우 (AbstractController을 서브 클래 싱하거나 @Controller으로 주석 처리 된 경우) 요청 객체에 직접 액세스 할 수 있어야합니다.

+0

Bean이 AbstarctController를 상속하지 않습니다. bean은 다음과 같습니다. <콩 ID ="RemoteService에 "클래스 ="gov.nih.nci.system.comm.server.ApplicationServiceServerImpl "/> 하지만 난 아니다 내 클래스 패스에 RequestContextHolder 가져 오는 중. 나는 봄을 사용하고있다. 1.2.7 –

+1

localhost와 나중에 서버 측에서 코드를 실행 중이다. 서버 측은 완벽하게 작동합니다. 하지만 localhost는'0 : 0 : 0 : 0 : 0 : 0 : 0 : 1'을 반환하고'getLocalAddr()'을 사용하는 경우도 –

+0

"요청 객체에 직접 액세스 할 수 있어야합니다" ? – jameshfisher

0

구성이 :

@Autowired(required = true) 
private HttpServletRequest request; 

과 같이 사용

request.getRemoteAddr() 
1

클라이언트 IP를 얻을 수있는 가장 좋은 방법은

private static final String[] IP_HEADER_CANDIDATES = { 
     "X-Forwarded-For", 
     "Proxy-Client-IP", 
     "WL-Proxy-Client-IP", 
     "HTTP_X_FORWARDED_FOR", 
     "HTTP_X_FORWARDED", 
     "HTTP_X_CLUSTER_CLIENT_IP", 
     "HTTP_CLIENT_IP", 
     "HTTP_FORWARDED_FOR", 
     "HTTP_FORWARDED", 
     "HTTP_VIA", 
     "REMOTE_ADDR" }; 

public static String getClientIpAddress(HttpServletRequest request) { 
    for (String header : IP_HEADER_CANDIDATES) { 
     String ip = request.getHeader(header); 
     if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { 
      return ip; 
     } 
    } 
    return request.getRemoteAddr(); 
} 
관련 문제