1 回答
TA贡献1887条经验 获得超5个赞
这不是一项微不足道的任务,但您的配置看起来不错,您只需要从您设置的标头中获取原始 IP ( X-Real-IP)。
import javax.websocket.*;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpoint;
import javax.websocket.server.ServerEndpointConfig;
@ServerEndpoint(value = "/test", configurator = Test.TestConfiguratior.class)
public class Test extends Endpoint {
@Override
public void onOpen(Session session, EndpointConfig endpointConfig) {
Object o = endpointConfig.getUserProperties().get(TestConfiguratior.HEADER_NAME);
//o should be the string object you are looking for
}
@OnMessage
public void onMessage(Session session, String msg) {
//do what u want
}
public static class TestConfiguratior extends ServerEndpointConfig.Configurator {
static String HEADER_NAME = "X-Real-IP";
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
String firstFoundHeader = request.getHeaders().get(HEADER_NAME.toLowerCase()).get(0);
sec.getUserProperties().put(HEADER_NAME, firstFoundHeader);
}
}
}
TL.DR.:您可以使用javax.websocket.EndpointConfig#getUserProperties地图将数据放入其中并稍后检索。最初我认为这在使用这个确切的代码时会导致一些并发问题,但我无法重现它。甚至文档也建议这样做:https : //javaee.github.io/tutorial/websocket010.html
更新:这是一个JSR 356示例,并非特定于上述框架。
添加回答
举报