1 回答

TA貢獻1887條經(jīng)驗 獲得超5個贊
這不是一項微不足道的任務(wù),但您的配置看起來不錯,您只需要從您設(shè)置的標(biāo)頭中獲取原始 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地圖將數(shù)據(jù)放入其中并稍后檢索。最初我認為這在使用這個確切的代碼時會導(dǎo)致一些并發(fā)問題,但我無法重現(xiàn)它。甚至文檔也建議這樣做:https : //javaee.github.io/tutorial/websocket010.html
更新:這是一個JSR 356示例,并非特定于上述框架。
添加回答
舉報