我使用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
异常。请一些身体帮助我找出我在这里做错了什么。在此先感谢..!
答案 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();
}
}