我有一个在glassfish 4.1中运行的后端REST应用程序。 在这个简单的测试资源中,我想记录远程地址:
import java.util.logging.Logger;
import javax.enterprise.context.RequestScoped;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
@Path("test")
@RequestScoped
public class TestResource {
private static final Logger LOG = Logger.getLogger(TestResource.class.getName());
@Context
private UriInfo context;
public TestResource() {
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getText(@Context HttpServletRequest req) {
LOG.info("TEST - REMOTE ADDRESS: " + req.getRemoteAddr());
throw new UnsupportedOperationException();
}
}
我什么都没有"奇怪"并且没有代理(因此没有" x-forwarded-for"等等),但是当我访问资源时,我总是获取null作为远程地址。
我已经google了很多并尝试了不同的解决方案,但没有运气(即:实现过滤器不起作用:在过滤器request.getRemoteAddr()内部始终为null)。