精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WebSocket 自定義安全校驗優化實踐

開發 前端
在以Spring Boot與Vue搭建的應用體系里,WebSocket作為實現前后端實時交互的得力助手,被廣泛運用。然而隨著網絡安全形勢日益嚴峻,為WebSocket交互筑牢安全防線變得至關重要。

前言

在以Spring Boot與Vue搭建的應用體系里,WebSocket作為實現前后端實時交互的得力助手,被廣泛運用。然而隨著網絡安全形勢日益嚴峻,為WebSocket交互筑牢安全防線變得至關重要。

實現

傳統

@Slf4j
@Component
@ServerEndpoint("/websocket/link/{userId}")
public class OldWebSocketService {
    // 用于存儲在線用戶的會話,使用ConcurrentHashMap確保線程安全
    private static final Map<String, Session> onlineSessions = new ConcurrentHashMap<>();

    @OnOpen
    public void handleOpen(Session session, @PathParam("userId") String userId) {
        onlineSessions.put(userId, session);
        log.info("用戶ID為 {} 的用戶已連接,當前在線用戶數: {}", userId, onlineSessions.size());
        broadcastMessage("系統提示:有新用戶加入");
    }

    @OnMessage
    public void handleMessage(String message, Session session, @PathParam("userId") String userId) {
        log.info("服務端收到用戶ID為 {} 的消息: {}", userId, message);
        JSONObject jsonMessage = JSON.parseObject(message);
        String targetUserId = jsonMessage.getString("to");
        String content = jsonMessage.getString("content");

        Session targetSession = onlineSessions.get(targetUserId);
        if (targetSession != null) {
            JSONObject responseMessage = new JSONObject();
            responseMessage.put("from", userId);
            responseMessage.put("content", content);
            sendMessage(responseMessage.toJSONString(), targetSession);
            log.info("向用戶ID為 {} 發送消息: {}", targetUserId, responseMessage.toJSONString());
        } else {
            log.info("未能找到用戶ID為 {} 的會話,消息發送失敗", targetUserId);
        }
    }

    private void sendMessage(String message, Session targetSession) {
        try {
            log.info("服務端向客戶端[{}]發送消息: {}", targetSession.getId(), message);
            targetSession.getBasicRemote().sendText(message);
        } catch (Exception e) {
            log.error("服務端向客戶端發送消息失敗", e);
        }
    }

    private void broadcastMessage(String message) {
        for (Session session : onlineSessions.values()) {
            sendMessage(message, session);
        }
    }

    @OnClose
    public void handleClose(Session session, @PathParam("userId") String userId) {
        onlineSessions.remove(userId);
        log.info("用戶ID為 {} 的連接已關閉,當前在線用戶數: {}", userId, onlineSessions.size());
    }
}

打造安全加固的 WebSocket 體系

實現流程

  1. 客戶端發起連接:客戶端向/secure-websocket地址發起WebSocket連接請求,在請求頭中攜帶Authorization(即token)和Unique-User-Key(用戶唯一標識)。
  2. 攔截器校驗:服務端的SecurityInterceptor攔截請求,獲取并校驗token。若token無效,阻止握手;若有效,則將用戶唯一標識存入attributes。
  3. 連接建立:若攔截器允許握手,連接成功建立。EnhancedWebSocketHandler的afterConnectionEstablished方法被調用,獲取用戶唯一標識并存儲會話。
  4. 消息交互:客戶端和服務端進行消息收發。EnhancedWebSocketHandler的handleMessage方法處理消息前,先校驗消息來源的用戶唯一標識是否合法。
  5. 連接關閉:連接關閉時,EnhancedWebSocketHandler的afterConnectionClosed方法被調用,移除對應會話。

自定義 WebSocket 處理器

@Slf4j
@Component
public class EnhancedWebSocketHandler implements WebSocketHandler {
    // 存儲用戶標識與會話的映射關系,保證線程安全
    private static final Map<String, WebSocketSession> userSessionMap = new ConcurrentHashMap<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        String userKey = (String) session.getAttributes().get("uniqueUserKey");
        session.sendMessage(new TextMessage("用戶:"+userKey+" 認證成功"));

        log.info("WebSocket連接已建立,用戶唯一標識: {}, 會話ID: {}", userKey, session.getId());
        userSessionMap.put(userKey, session);
        log.info("新用戶連接,當前在線用戶數: {}", userSessionMap.size());
    }

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        JSONObject json = JSONObject.parseObject((String) message.getPayload());
        if(!userSessionMap.containsKey(json.getString("to"))){
            session.sendMessage(new TextMessage("接收用戶不存在!!!"));
            return;
        }
        String userKey = (String) session.getAttributes().get("uniqueUserKey");
        if (!userSessionMap.containsKey(userKey)) {
            session.sendMessage(new TextMessage("發送用戶不存在!!!"));
            return;
        }
        session.sendMessage(new TextMessage("收到 over"));
        log.info("消息接收成功,內容: {}", message.getPayload());
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        String userKey = (String) session.getAttributes().get("uniqueUserKey");
        if (userSessionMap.containsKey(userKey)) {
            log.error("WebSocket傳輸出現錯誤,用戶標識: {}, 錯誤信息: {}", userKey, exception.getMessage());
        }
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        String userKey = (String) session.getAttributes().get("uniqueUserKey");
        log.info("WebSocket連接已關閉,會話ID: {}, 關閉狀態: {}", session.getId(), closeStatus);
        userSessionMap.remove(userKey);
    }

    @Override
    public boolean supportsPartialMessages() {
        returntrue;
    }

    public void sendMessage(String message, WebSocketSession targetSession) {
        try {
            log.info("服務端向客戶端[{}]發送消息: {}", targetSession.getId(), message);
            targetSession.sendMessage(new TextMessage(message));
        } catch (Exception e) {
            log.error("服務端向客戶端發送消息失敗", e);
        }
    }

    public void broadcastMessage(String message) {
        for (WebSocketSession session : userSessionMap.values()) {
            sendMessage(message, session);
        }
    }
}

自定義 WebSocket 攔截器

@Slf4j
@Component
public class SecurityInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Map<String, Object> attributes) throws Exception {
        // 獲取 HttpServletRequest 對象
        HttpServletRequest rs=((ServletServerHttpRequest) request).getServletRequest();
        String token = rs.getParameter("Authorization");
        log.info("攔截器獲取到的令牌: {}", token);
        if (token == null ||!isValidToken(token)) {
            log.warn("無效的令牌,拒絕WebSocket連接");
            returnfalse;
        }
        String userKey = rs.getParameter("UniqueUserKey");
        attributes.put("uniqueUserKey", userKey);
        returntrue;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Exception exception) {
        // 可在此處添加握手成功后的處理邏輯
    }

    private boolean isValidToken(String token) {
        // 實際應用中應包含復雜的令牌驗證邏輯,如JWT驗證
        // 此處僅為示例,簡單判斷令牌是否為"validToken"
        return"1234".equals(token);
    }
}

WebSocket 配置類

@Configuration
@EnableWebSocket
public class WebSocketSecurityConfig implements WebSocketConfigurer {
    private final EnhancedWebSocketHandler enhancedWebSocketHandler;
    private final SecurityInterceptor securityInterceptor;

    public WebSocketSecurityConfig(EnhancedWebSocketHandler enhancedWebSocketHandler, SecurityInterceptor securityInterceptor) {
        this.enhancedWebSocketHandler = enhancedWebSocketHandler;
        this.securityInterceptor = securityInterceptor;
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(enhancedWebSocketHandler, "/secure-websocket")
               .setAllowedOrigins("*")
               .addInterceptors(securityInterceptor);
    }

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

示例頁面

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WebSocket 認證交互頁面</title>
    <link  rel="stylesheet" >
    <style>
        body {
            font-family: Arial, sans-serif;
        }

        #authSection {
            margin-bottom: 10px;
        }

        #tokenInput,
        #userKeyInput {
            width: 200px;
            padding: 8px;
            margin-right: 10px;
        }

        #authButton {
            padding: 8px 16px;
        }

        #messageInput {
            width: 300px;
            padding: 8px;
            margin-right: 10px;
        }

        #targetUserInput {
            width: 200px;
            padding: 8px;
            margin-right: 10px;
        }

        #sendButton {
            padding: 8px 16px;
        }

        #messageList {
            list-style-type: none;
            padding: 0;
        }

        #messageList li {
            margin: 8px 0;
            border: 1px solid #ccc;
            padding: 8px;
            border-radius: 4px;
        }
    </style>
</head>

<body>
<h2>WebSocket 認證交互頁面</h2>
<div id="authSection">
    <label for="tokenInput">輸入認證 Token:</label>
    <input type="text" id="tokenInput" placeholder="請輸入認證 Token">
    <label for="userKeyInput">輸入用戶唯一標識:</label>
    <input type="text" id="userKeyInput" placeholder="請輸入用戶唯一標識">
    <button id="authButton">認證并連接</button>
</div>
<input type="text" id="messageInput" placeholder="請輸入要發送的消息">
<input type="text" id="targetUserInput" placeholder="請輸入接收消息的用戶標識">
<button id="sendButton">發送消息</button>
<ul id="messageList"></ul>
<script>
    let socket;

    document.getElementById('authButton').addEventListener('click', function () {
        const token = document.getElementById('tokenInput').value;
        const userKey = document.getElementById('userKeyInput').value;
        if (token.trim() === '' || userKey.trim() === '') {
            console.error('Token 或用戶唯一標識不能為空');
            return;
        }

        const socketUrl = 'ws://localhost:8080/secure-websocket?Authorization='+token+'&UniqueUserKey='+userKey ;
        socket = new WebSocket(socketUrl);

        socket.onopen = function () {
             console.log('WebSocket 連接已打開');
        };

        socket.onmessage = function (event) {
            const messageItem = document.createElement('li');
            messageItem.textContent = event.data;
            document.getElementById('messageList').appendChild(messageItem);
        };

        socket.onclose = function () {
            console.log('WebSocket 連接已關閉');
        };

        socket.onerror = function (error) {
            console.error('WebSocket 發生錯誤:', error);
        };
    });

    document.getElementById('sendButton').addEventListener('click', function () {
        if (!socket || socket.readyState!== WebSocket.OPEN) {
            console.error('WebSocket 連接未建立或已關閉');
            return;
        }
        const message = document.getElementById('messageInput').value;
        const targetUser = document.getElementById('targetUserInput').value;
        if (message.trim() === '' || targetUser.trim() === '') {
            return;
        }
        const messageObj = {
            to: targetUser,
            content: message
        };
        socket.send(JSON.stringify(messageObj));
        document.getElementById('messageInput').value = '';
        document.getElementById('targetUserInput').value = '';
    });
</script>
</body>

</html>

測試

圖片圖片

責任編輯:武曉燕 來源: 一安未來
相關推薦

2017-05-19 10:03:31

AndroidBaseAdapter實踐

2023-12-21 09:00:21

函數React 組件useEffect

2017-05-18 12:36:16

android萬能適配器列表視圖

2025-01-22 11:10:34

2022-04-01 15:59:22

SQLPostgreSQL審計

2010-08-12 09:45:33

jQuery自定義事件

2023-06-27 15:02:47

2015-02-12 15:33:43

微信SDK

2023-06-28 08:05:46

場景vue3自定義

2015-02-12 15:38:26

微信SDK

2009-07-06 13:49:29

2012-02-29 09:14:45

ibmdw

2012-03-06 09:19:56

ibmdw

2016-11-16 21:55:55

源碼分析自定義view androi

2016-12-26 15:25:59

Android自定義View

2011-06-23 10:49:13

Qt 自定義信號

2022-11-10 07:53:54

Spring參數校驗

2023-10-30 16:14:44

Metrics SD數據庫

2011-09-08 13:56:41

ASP.NET性能

2009-07-06 16:59:26

JSP自定義標簽
點贊
收藏

51CTO技術棧公眾號

国新精品乱码一区二区三区18| 日韩视频在线永久播放| 欧美国产一区二区在线| 中文字幕+乱码+中文乱码www| 欧美一区二区三区高清视频| 91精品国产一区二区三区| avav在线播放| 成年网站在线| 丁香激情综合国产| 国产精品69久久| 小早川怜子一区二区的演员表| 9l视频自拍蝌蚪9l视频成人| 精品成人av一区| 一区二区在线中文字幕电影视频| 六月丁香综合网| 免费高清成人在线| 91干在线观看| 在线免费日韩av| 色综合综合网| 亚洲爱爱爱爱爱| 天天看片天天操| 日韩脚交footjobhd| 亚洲色图另类专区| 亚洲va韩国va欧美va精四季| 欧美视频在线观看一区二区三区| 美女视频黄频大全不卡视频在线播放 | 国产a级片网站| 免费在线视频欧美| 久久久久久久免费视频了| 99影视tv| 国产精品欧美久久久久天天影视| 乱码第一页成人| 欧美激情一区二区三级高清视频| 国产又粗又长又黄的视频| 青青一区二区| 日韩三级中文字幕| 亚洲18在线看污www麻豆| 国产精品扒开腿做爽爽爽视频软件| 一个色妞综合视频在线观看| 中国一级黄色录像| 亚洲乱亚洲乱妇| 亚洲一区二区天堂| 欧美在线91| 日日噜噜噜夜夜爽亚洲精品| 精品人妻互换一区二区三区| 欧美激情极品| 亚洲精品国产欧美| 欧美激情 亚洲| 亚洲国产视频二区| 制服丝袜成人动漫| 成 人 黄 色 小说网站 s色| 日韩制服一区| 欧美在线看片a免费观看| 国内外成人激情视频| 不卡视频观看| 亚洲观看高清完整版在线观看| 51xx午夜影福利| 国产一二三区在线观看| 国产精品家庭影院| 一区二区精品国产| 日本最黄一级片免费在线| 亚洲国产高清在线| 视频一区二区三| av基地在线| 欧美极品xxx| 在线观看成人av| 成人在线app| 亚洲精品欧美激情| 4444亚洲人成无码网在线观看| 精品51国产黑色丝袜高跟鞋| 亚洲精品写真福利| 日韩一级片免费视频| 高端美女服务在线视频播放| 欧美日韩国产激情| 凹凸国产熟女精品视频| 欧美三区四区| 欧美色视频在线| 福利视频999| 久久中文字幕一区二区| 精品久久久久久久久久久久久久久 | 午夜时刻免费入口| 成人女性视频| 亚洲最新视频在线观看| 亚洲精品久久久一区二区三区| 日韩精品xxx| 久久久久久久久久久久久久久久久久久久 | 99国产精品久久久久久久久久久| 免费久久99精品国产自| 都市激情一区| 亚洲精品欧美二区三区中文字幕| 懂色av粉嫩av蜜臀av| 成人福利影视| 在线免费不卡视频| 手机在线观看日韩av| 国产精品调教| 在线中文字幕日韩| 麻豆视频在线观看| 亚洲综合丁香| 91精品啪在线观看麻豆免费| 日本高清视频免费看| 国产婷婷色一区二区三区| 黄色一级视频播放| 中文字幕资源网在线观看免费| 欧美日韩国产综合草草| 极品白嫩的小少妇| 日韩在线不卡| 97色伦亚洲国产| 一区二区www| 99国产欧美另类久久久精品| 好色先生视频污| 韩日成人影院| 欧美v日韩v国产v| 欧美三级视频网站| 亚洲精品社区| 国产日韩欧美影视| 暖暖视频在线免费观看| 亚洲摸摸操操av| 国产视频一区二区三区在线播放 | 91短视频版在线观看www免费| 一区二区三区在线高清| 亚洲少妇第一页| 精品国产一区二区三区不卡蜜臂| 久久精品91久久香蕉加勒比| 中文字幕高清在线免费播放| 成人自拍视频在线观看| 在线视频91| 亚洲妇熟xx妇色黄蜜桃| 毛片在线网址| 欧美日本在线视频| 好吊视频在线观看| 影音先锋一区| yy111111少妇影院日韩夜片| 青青青青在线| 欧美三级三级三级| 亚洲理论片在线观看| 99精品国产99久久久久久福利| 91在线看网站| 国产成人无吗| 欧美日韩国产精品自在自线| 免费看污片网站| 99成人免费视频| 国产乱码一区| 日韩av免费播放| 91欧美激情一区二区三区成人| a天堂资源在线观看| 国产精品色婷婷在线观看| 色偷偷888欧美精品久久久| 欧美日韩综合一区二区三区| 99re在线视频这里只有精品| 成人午夜免费在线| 精品国产导航| 69av视频在线播放| 香港一级纯黄大片| 欧美性videos高清精品| 久久无码人妻精品一区二区三区| 亚洲免费成人| 精品视频一区在线| 国产免费不卡| 一区二区三区亚洲| 一区二区三区黄| 亚洲色图欧洲色图婷婷| 国产成人精品综合久久久久99 | 日产精品久久久久久久蜜臀| 久久一级大片| 国内精品视频久久| 头脑特工队2免费完整版在线观看 头脑特工队2在线播放 | 欧美日韩日日摸| 日韩av毛片在线观看| 极品尤物av久久免费看| 国产精品久久成人免费观看| 欧一区二区三区| 国产日韩1区| 国产综合在线观看视频| 很黄的网站在线观看| 日韩欧美国产精品一区| 国产精品第56页| 97精品视频在线观看自产线路二| 欧美综合在线观看视频| 欧美freesextv| 99porn视频在线| 久草免费在线视频| 一区二区三区无码高清视频| 国产美女裸体无遮挡免费视频| 一区二区不卡在线播放| 中文字幕一区二区三区人妻| 免费精品视频最新在线| 99中文字幕在线观看| 精品久久ai电影| 国产精品久久久久久久久免费看| 麻豆网站在线看| 亚洲国产精彩中文乱码av在线播放| 日日摸天天添天天添破| 国产精品日产欧美久久久久| 中文字幕一二三区| 久久一区中文字幕| 久久天天东北熟女毛茸茸| 亚洲人成网77777色在线播放| 国产精品久久久久久av福利软件| 天堂av最新在线| 亚洲欧美精品一区二区| 国产色综合视频| 色哟哟国产精品| 美女视频黄免费| 国产人成一区二区三区影院| wwwww在线观看| 日本视频在线一区| 日韩日韩日韩日韩日韩| 日韩系列欧美系列| 久久综合久久综合这里只有精品| 免费日韩成人| 欧洲一区二区视频| 四虎亚洲成人| 中文字幕亚洲在线| 天堂网www中文在线| 这里只有精品电影| 99久久久无码国产精品免费蜜柚| 亚洲激情自拍偷拍| 超碰人人干人人| 久久蜜桃香蕉精品一区二区三区| 国产成人黄色网址| 一本色道久久| 国产性生活免费视频| 日韩国产欧美| 日本公妇乱淫免费视频一区三区| 成人三级毛片| 精品国产sm最大网站| 看av免费毛片手机播放 | 日b视频免费观看| 成人在线视频免费观看| 久久久久久久有限公司| 国产成人在线中文字幕| 亚洲伊人第一页| 日韩成人在线一区| 国产精品日韩精品| 欧美艳星kaydenkross| 97欧美精品一区二区三区| 亚洲精品一线| 蜜臀久久99精品久久久久久宅男| 波多野结衣在线网站| 亚洲精品视频免费| 性感美女福利视频| 亚洲成年人在线播放| 国产jzjzjz丝袜老师水多| 欧美久久久久久久久| 自拍偷拍第八页| 在线观看一区二区视频| 99超碰在线观看| 色综合中文综合网| 国产午夜麻豆影院在线观看| 精品日韩中文字幕| wwwwww国产| 黑人巨大精品欧美一区二区三区 | 欧美成人69| 路边理发店露脸熟妇泻火| 欧美国产精品| 800av在线免费观看| 欧美日韩亚洲一区在线观看| 国产精品国三级国产av| 国产精品s色| 国产精品成人久久电影| 亚洲精华国产欧美| 欧美视频在线播放一区| 久久福利影视| 色综合天天色综合| 久久99精品久久久久久国产越南| 手机版av在线| 国产成人在线影院 | 97品白浆高清久久久久久| av一区二区三区四区电影| 成人涩涩网站| 久久av一区二区三区漫画| 美女精品一区最新中文字幕一区二区三区 | 97久久精品人人澡人人爽| 国产人妻一区二区| 欧美电影《睫毛膏》| 欧美精品v国产精品v日韩精品| 日韩精品在线一区二区三区| 欧美日韩美女一区二区| 精品久久人妻av中文字幕| 亚洲精品v欧美精品v日韩精品| 日本在线视频1区| www.久久久久久.com| 日韩av官网| 青青青国产精品一区二区| 草莓视频成人appios| 亚洲va久久久噜噜噜| 国内精品偷拍| 亚洲电影一二三区| 亚洲视频观看| 国产一级不卡毛片| 国产高清一区日本| 加勒比综合在线| 一区二区三区在线高清| www.欧美色| 日韩欧美一级片| 国产剧情精品在线| 精品亚洲一区二区三区| 高清免费电影在线观看| 9.1国产丝袜在线观看| 久久亚洲精品人成综合网| 国产精品国产一区二区| 欧美自拍偷拍| 99久久国产综合精品五月天喷水| 石原莉奈一区二区三区在线观看| 亚洲综合伊人久久| 久久久99久久| 国产在线拍揄自揄拍无码视频| 在线国产亚洲欧美| 人妻视频一区二区三区| 久久久999成人| 国产高清不卡| 国产精品久久久久久久久久久久午夜片 | 欧美日韩国产欧| 我要看一级黄色大片| 99久久国产综合色|国产精品| 亚洲国产123| 91国偷自产一区二区使用方法| 亚洲国产www| 久久精品亚洲热| 日韩三区免费| 久精品国产欧美| 国产精品v亚洲精品v日韩精品 | 伊人情人网综合| 美女久久一区| 波多野结衣视频播放| 亚洲精品成人悠悠色影视| 又污又黄的网站| 亚洲人午夜精品| 成人黄色动漫| 国产一区二区调教| av黄色免费网站| 亚洲国产成人tv| 午夜精品一区二区三| 精品国产一区二区三区久久久狼| 成人软件在线观看| 明星裸体视频一区二区| 亚洲激精日韩激精欧美精品| 中文字幕在线观看视频www| 亚洲同性同志一二三专区| 可以免费看的av毛片| 精品对白一区国产伦| 四虎影视成人| 99在线热播| 欧美日韩在线大尺度| av在线免费观看不卡| 亚洲欧洲综合另类在线| 国产精品视频第一页| 视频在线观看99| 国产麻豆一区| 亚洲一区二区在| 毛片不卡一区二区| 女同久久另类69精品国产| 欧美午夜精品电影| 日本高清在线观看wwwww色| 国产精品爽爽爽| 99久久精品费精品国产风间由美 | 久草视频精品在线| 精品国产乱码久久久久久免费| 国产蜜臀在线| 国产专区一区二区| 久久精品系列| 免费黄色在线网址| 欧美一区二区在线免费观看| 永久免费网站在线| 国产中文一区二区| 日一区二区三区| 欧美特黄一级片| 日韩精品一区二区三区蜜臀 | 日本a级片电影一区二区| 精品freesex老太交| 深夜黄色小视频| ...xxx性欧美| 黄片毛片在线看| 26uuu国产精品视频| 波多野结衣在线播放一区| 午夜啪啪小视频| 午夜婷婷国产麻豆精品| 你懂的好爽在线观看| 国产欧美日韩专区发布| 欧美精品国产一区二区| 亚洲国产果冻传媒av在线观看| 色哟哟一区二区三区| 黄色视屏免费在线观看| 国产精品传媒毛片三区| 乱码第一页成人| 麻豆视频在线免费看| 亚洲精品国精品久久99热一| 四虎成人在线| 乱熟女高潮一区二区在线| 91一区二区三区在线观看| 亚洲免费视频二区| 欧美极品少妇xxxxⅹ裸体艺术 | 日本免费一二三区| 尤物yw午夜国产精品视频| 一区二区日韩| av视屏在线播放| 九九亚洲视频| 亚洲一区二区免费在线| 国产欧美在线| avtt天堂在线|