如何在Embedded NettyJaxrsServer

时间:2016-02-29 12:16:22

标签: java maven jax-rs netty resteasy

我使用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;
}

和我的网络服务类

@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异常。请一些身体帮助我找出我在这里做错了什么。在此先感谢..!

1 个答案:

答案 0 :(得分:0)

经过几次试验和错误后,以下代码帮助我在Service方法中获取了客户端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();
    }

}