- Nginx增加如下配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2.Java程序中
- 增加HttpSessionConfigurator
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<String, List<String>> headers = request.getHeaders();
List<String> addressMap = new ArrayList<String>();
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);
}
}
- WebSocketServer的@ServerEndpoint改爲
@ServerEndpoint(value="/ws/{sid}/{stype}",configurator = HttpSessionConfigurator.class)
- WebSocketServer的onOpen方法重寫爲
@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異常");
}
}
以上