第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Websocket 通過 Nginx 轉(zhuǎn)發(fā)用戶 IP

在 Websocket 通過 Nginx 轉(zhuǎn)發(fā)用戶 IP

慕田峪9158850 2022-01-06 17:57:03
我正在使用這個 Websocket 庫和這里的示例來創(chuàng)建基于 websockets 的多個服務(wù)。接收請求的主服務(wù)器是 Nginx 服務(wù)器,它根據(jù)請求的來源(基于域)轉(zhuǎn)發(fā)請求,因此我可以確定收到的請求是針對 websocket 的。然而問題出在這里:public void onOpen(WebSocket ws, ClientHandshake handshake) {    System.out.println("-------------------------------");    System.out.println(ws.getRemoteSocketAddress());    System.out.println("-------------------------------");}getRemoteSocketAddress將始終返回 nginx 服務(wù)器 IP,類似于/192.168.1.100:43556我的nginx配置是:server{    listen 80;    server_name we.mydomain.com;    access_log /var/log/nginx/access-ws-debug.log;    error_log /var/log/nginx/error-ws-debug.log;    set_real_ip_from  192.168.1.0/24;    real_ip_header X-Real-IP;    real_ip_recursive on;    location / {       proxy_pass http://192.168.1.101:54321;       proxy_http_version 1.1;       proxy_set_header X-Real-IP $remote_addr;       proxy_set_header Host $http_host; #host       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       proxy_set_header Y-Real-IP $realip_remote_addr;       proxy_set_header Upgrade $http_upgrade;       proxy_set_header Connection "Upgrade";       proxy_connect_timeout 1d;       proxy_send_timeout 1d;       proxy_read_timeout 1d;    }}nxing的配置有問題嗎?或者有沒有其他方法可以獲取websocket背后用戶的IP?感謝馬克的回答解決了。以下代碼與提到的庫無關(guān)。它是jsp 中沒有任何庫的“經(jīng)典”Web 實現(xiàn)。我將握手修改為如下所示:@Overridepublic void modifyHandshake(        ServerEndpointConfig config,        HandshakeRequest request,        HandshakeResponse response) {    HttpSession httpSession = (HttpSession) request.getHttpSession();    config.getUserProperties().put(HttpSession.class.getName(), httpSession);    config.getUserProperties().put("Headers",request.getHeaders());}要獲取標(biāo)題,只需在 OnOpen 中調(diào)用它:@OnOpenpublic void onOpen(final Session session, EndpointConfig config){ //This happens when javascript opens socket session    Object list = config.getUserProperties().get("Headers");    System.out.println("-------------------------------------");    System.out.println(list);    System.out.println("-------------------------------------");}
查看完整描述

1 回答

?
慕工程0101907

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示例,并非特定于上述框架。


查看完整回答
反對 回復(fù) 2022-01-06
  • 1 回答
  • 0 關(guān)注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號