2016-02-29 155 views
0

我已經使用NettyJaxrsServer創建了獨立應用程序。在一種情況下,我想獲取請求的IP到服務器。如何做到這一點。?如何獲取嵌入式NettyJaxrsServer中的請求的客戶端IP

我這裏有POM具有依賴性

<dependency> 
<groupId>org.jboss.resteasy</groupId> 
<artifactId>resteasy-netty</artifactId> 
<version>3.0.10.Final</version> 
</dependency> 

我曾嘗試使用下面的代碼創建的NettyJaxrsServer

public void createServer() 
{ 
    server = new NettyJaxrsServer(); 
    server.setDeployment(getDeployment()); 
    server.setPort(configuration.getPort()); 
    server.setSecurityDomain(null); server.setRootResourcePath(configuration.getResourceRootPath()); 

} 

public ResteasyDeployment getDeployment() { 
    final ResteasyDeployment dp = new ResteasyDeployment(); 
    final Collection<Object> controllers = new ArrayList<Object>(); 
    controllers.add(ctx.getBean(TestIP.class)); 
    dp.getResources().addAll(controllers); 

    return dp; 
} 

和我的web服務類

@Path("/test") 
@Component 
public class TestIP { 

    @GET 
    @Path("/pingIp") 
    @Produces(MediaType.APPLICATION_JSON) 
    public String getAd(@Context HttpServletRequest servletRequest) { 
     return servletRequest.getRemoteAddr(); 
    } 

} 

而遭遇servletRequest.getRemoteAddr();它拋出的異常org.jboss.resteasy.spi.LoggableFailure。請一些身體幫助我找出我在這裏做錯了什麼。提前致謝..!

回答

0

一對夫婦的試錯後,下面的代碼幫助我得到的服務方法的客戶端IP ..

@Path("/test") 
@Component 
public class TestIP { 

    @GET 
    @Path("/pingIp") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getAd(@Context ChannelHandlerContext nioChannelContext) { 
     return ((java.net.InetSocketAddress)nioChannelContext.getChannel().getRemoteAddress()).getAddress().getHostAddress(); 
    } 

} 
相關問題