gpt4 book ai didi

java - 如何在javax.websocket服务器中获取远程客户端地址?

转载 作者:行者123 更新时间:2023-12-02 04:00:44 27 4
gpt4 key购买 nike

我有一个运行 websocket web 应用程序的 jetty 9.3.6 服务器。我想获取客户端 IP 地址以用于记帐目的,并且我可以看到它位于 javax.websocket.Session 对象中,但我不知道如何获取它,因为 API 没有不允许它。有些人似乎将其转换为 TyrusSession 对象(来自 org.glassfish.tyrus.core.TyrusSession),但是当我尝试这样做时,它编译得很好,但引发了运行时 websocket 服务器中的 ClassCastException 。我已将以下内容包含在我的 build.gradle 中:

compile 'org.glassfish.tyrus:tyrus-core:1.12' 

javax.websocket.Session中获取客户端IP地址的正确方法是什么?

最佳答案

SO rules一致,我在这里回答我自己的问题。

当我尝试将其转换为 TyrusSession 时,我得到了线索,而 Jetty 在错误日志中提示(引发了 ClassCastException),说它是一个 JsrSession code> 无法转换为 TyrusSession。但是,我刚刚在日志中打印了 Session 对象,并且出现了类似的内容:

session: WebSocketSession[....]

然后我尝试将其转换为 org.eclipse.jetty.websocket.common.WebSocketSession ,然后它提示该对象实际上是一个 JsrSession ,然后导致我的发现以下解决方案:

@ServerEndpoint (value="/mySillyApp", configurator= ..., decoders={...})
public class MySillyWebSocketServer
{
@OnOpen
public void open (Session session, EndpointConfig config)
{
JsrSession jsrSession = (JsrSession) session; // import org.eclipse.jetty.websocket.jsr356.JsrSession;
WebSocketSession webSocketSession = jsrSession.getWebSocketSession (); // import org.eclipse.jetty.websocket.common.WebSocketSession;
String clientIPAddressString = webSocketSession.getRemoteAddress ().getHostString ();
....
}
...
}

显然,您必须在类路径中包含适当的 jar。对于 gradle,您可以在 dependency {...} 部分中执行此操作:

  compile 'org.eclipse.jetty.websocket:javax-websocket-client-impl:9.3.6.v20151106'
compile 'org.eclipse.jetty.websocket:websocket-common:9.1.0.v20131115'

希望我的方法和细节对某人有所帮助。

关于java - 如何在javax.websocket服务器中获取远程客户端地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com