WICKET:如何获取客户端的IP地址

6
我正在使用Wicket 1.5.1,但无法解决这个问题。
public class MyPage extends WebPage {

public MyPage() {

    String clientAddress = ...?
3个回答

15
    WebRequest req = (WebRequest) RequestCycle.get().getRequest();
    HttpServletRequest httpReq = (HttpServletRequest) req.getContainerRequest();
    String clientAddress = httpReq.getRemoteHost();

2
那不应该是 httpReq.getRemoteAddr() 吗? - Xavi López
2
getRemoteAddr()将返回原始IP地址,而getRemoteHost()将尽可能返回已解析的地址名称(如果无法解析则返回IP)。 - tetsuo

3
继承WebClientInfo类提供一个公共方法,该方法委托保护的WebClientInfo.getRemoteAddr()方法。然后创建一个方法在自定义的RequestCycle类中查询它。在Wicket 1.3-1.4中,我通过子类化RequestCycle来实现这一点,但是在1.5中似乎有所不同:Wicket 1.5中的RequestCycleWebClientInfo具有查询X-Forwarded-For请求参数的优点,并且如果您的服务器在代理/负载均衡器后面使用XFF,它将返回正确的IP地址。

在Wicket 6中,如何获取WebClientInfo的实例? - user1547039
@Artem,请查看org.apache.wicket.markup.html.pages.BrowserInfoPage中的代码,以获取详细信息。 - mrak

2
使用Wicket 6和7,您可以执行以下操作:
String remoteAddress = ((WebClientInfo)Session.get().getClientInfo())
                      .getProperties()
                      .getRemoteAddress();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接