【问题标题】:How to get the client IP for a request in Embedded NettyJaxrsServer如何在 Embedded NettyJaxrsServer 中获取请求的客户端 IP
【发布时间】:2016-02-29 12:16:22
【问题描述】:

我使用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 异常。请一些身体治愈我,找出我在这里做错了什么。提前谢谢..!

【问题讨论】:

    标签: java maven jax-rs netty resteasy


    【解决方案1】:

    经过几次尝试和错误,以下代码帮助我在 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();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 2016-12-02
      • 2016-10-11
      • 2018-12-25
      • 2020-03-17
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多