Nginx 클 러 스 터 + websocket 웹 socket 클 라 이언 트 의 실제 IP 가 져 오기
2936 단어 Springboot
2. 자바 프로그램 중
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
import javax.websocket.server.ServerEndpointConfig.Configurator;
import org.apache.commons.lang.StringUtils;
public class HttpSessionConfigurator extends Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
HttpSession httpSession = (HttpSession) request.getHttpSession();
sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
Map> headers = request.getHeaders();
List addressMap = new ArrayList();
String realAddress;
try {
addressMap = headers.get("x-forwarded-for");
if (addressMap == null || addressMap.size() == 0) {
addressMap = headers.get("Proxy-Client-realAddress");
}
if (addressMap == null || addressMap.size() == 0) {
addressMap = headers.get("WL-Proxy-Client-realAddress");
}
if (addressMap == null || addressMap.size() == 0) {
realAddress = "";
} else{
realAddress = addressMap.get(0);
if(StringUtils.isEmpty(realAddress)){
realAddress = "";
}
}
} catch (Exception e) {
realAddress = "";
}
sec.getUserProperties().put("realAddress", realAddress);
}
} @ServerEndpoint(value="/ws/{sid}/{stype}",configurator = HttpSessionConfigurator.class)
@OnOpen
public void onOpen(Session session,EndpointConfig config ,@PathParam("sid") String sid, @PathParam("stype") String stype) {
String realAddress = (String) config.getUserProperties().get("realAddress");
this.session = session;
webSocketSet.add(this); // set
addOnlineCount(); // 1
LogUtil.getLoger("xxxx.ws").info(" :"+realAddress+"/"+sid+"/"+stype+", " + getOnlineCount());
this.sid=sid;
try {
sendMessage("connected");
} catch (IOException e) {
LogUtil.getLoger("cnyy.ws").info("websocket IO ");
}
} 이상