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

微服務架構下的會話管理:實現跨服務單點登錄與權限校驗

開發 架構
在微服務架構下,會話管理和單點登錄的實現需要綜合考慮無狀態設計、分布式存儲、安全性和性能等多個方面。通過采用JWT、OAuth 2.0/OpenID Connect等標準協議,結合API網關的統一鑒權和服務內的細粒度權限控制,可以構建出安全、高效且可擴展的會話管理系統。

隨著微服務架構的廣泛應用,傳統的單體應用會話管理方式已不再適用。在分布式環境中,用戶請求可能被路由到不同的服務實例,這就要求我們必須重新思考如何管理用戶狀態、實現跨服務認證和權限控制。本文將深入探討微服務架構下的會話管理方案,詳細介紹單點登錄(SSO)的實現原理,并提供實用的技術解決方案。

1. 微服務會話管理的挑戰

在微服務架構中,服務被拆分為多個小型、自治的單元,每個服務可能運行在不同的進程或服務器上。這種分布式特性帶來了以下會話管理挑戰:

  • 狀態管理難題:傳統單體應用中將用戶會話存儲在服務器內存的方式無法在服務間共享
  • 擴展性問題:需要支持水平擴展,會話數據必須能夠跨多個實例訪問
  • 一致性要求:用戶登錄狀態需要在所有服務中保持一致
  • 安全性考慮:會話信息需要在網絡間安全傳輸

2. 會話存儲方案

2.1 無狀態會話設計

在微服務架構中,推薦采用無狀態會話設計,將會話數據存儲在客戶端而不是服務端。JSON Web Token (JWT) 是目前最流行的解決方案。

// JWT 示例結構
header.payload.signature

// Header
{
  "alg": "HS256",
  "typ": "JWT"
}

// Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622,
  "roles": ["USER", "ADMIN"]
}

// Signature
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

2.2 有狀態會話的分布式存儲

如果必須使用有狀態會話,可以采用分布式緩存解決方案:

// Spring Session 配置示例
@Configuration
@EnableRedisHttpSession
public class SessionConfig {
    
    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }
    
    @Bean
    public HttpSessionIdResolver httpSessionIdResolver() {
        return HeaderHttpSessionIdResolver.xAuthToken(); 
    }
}

3. 單點登錄(SSO)實現方案

3.1 基于OAuth 2.0/OpenID Connect的SSO

OAuth 2.0和OpenID Connect是目前最成熟的SSO解決方案。以下是一個簡化的授權碼流程:

  • 用戶訪問客戶端應用
  • 客戶端將用戶重定向到認證服務器
  • 用戶登錄并授權
  • 認證服務器返回授權碼
  • 客戶端使用授權碼換取訪問令牌和ID令牌
// 客戶端處理OAuth2回調的示例
@RestController
public class OAuth2Controller {
    
    @GetMapping("/login/oauth2/code/{registrationId}")
    public String handleOAuth2Callback(
            @PathVariable String registrationId,
            @RequestParam String code,
            @RequestParam String state,
            HttpSession session) {
        
        // 驗證state參數防止CSRF攻擊
        if (!validateState(state, session)) {
            throw new IllegalStateException("Invalid state parameter");
        }
        
        // 使用授權碼獲取令牌
        OAuth2AccessTokenResponse tokenResponse = exchangeCodeForTokens(code);
        
        // 解析ID令牌獲取用戶信息
        Jwt idToken = parseIdToken(tokenResponse.getIdToken());
        
        // 創建本地會話或直接使用令牌
        createUserSession(idToken.getClaims());
        
        return "redirect:/home";
    }
}

3.2 自研SSO方案

對于特定場景,也可以考慮自研SSO方案:

// 簡化的SSO令牌生成與驗證
public class SsoTokenManager {
    
    private final String secretKey;
    private final long tokenValidity;
    
    public String generateToken(User user) {
        long now = System.currentTimeMillis();
        Date expiryDate = new Date(now + tokenValidity);
        
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", user.getId());
        claims.put("username", user.getUsername());
        claims.put("roles", user.getRoles());
        
        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date(now))
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, secretKey)
                .compact();
    }
    
    public boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    public User extractUser(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(token)
                .getBody();
        
        User user = new User();
        user.setId(claims.get("userId", Long.class));
        user.setUsername(claims.get("username", String.class));
        user.setRoles(claims.get("roles", List.class));
        
        return user;
    }
}

4. 跨服務權限校驗

4.1 API網關統一鑒權

API網關可以作為統一的權限校驗入口:

// 網關過濾器示例
@Component
public class AuthenticationFilter implements GlobalFilter {
    
    private final TokenProvider tokenProvider;
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = extractToken(exchange.getRequest());
        
        if (token == null) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        if (!tokenProvider.validateToken(token)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        // 將用戶信息添加到請求頭中傳遞給下游服務
        User user = tokenProvider.extractUser(token);
        ServerHttpRequest modifiedRequest = exchange.getRequest().mutate()
                .header("X-User-Id", user.getId().toString())
                .header("X-User-Roles", String.join(",", user.getRoles()))
                .build();
        
        return chain.filter(exchange.mutate().request(modifiedRequest).build());
    }
    
    private String extractToken(ServerHttpRequest request) {
        List<String> authHeaders = request.getHeaders().get("Authorization");
        if (authHeaders != null && !authHeaders.isEmpty()) {
            String authHeader = authHeaders.get(0);
            if (authHeader.startsWith("Bearer ")) {
                return authHeader.substring(7);
            }
        }
        return null;
    }
}

4.2 服務內權限校驗

即使網關進行了初步校驗,各服務仍需進行細粒度權限控制:

// 使用Spring Security進行方法級權限控制
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
    
    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        return new OAuth2MethodSecurityExpressionHandler();
    }
}

// 在服務方法上使用注解進行權限控制
@Service
public class OrderService {
    
    @PreAuthorize("hasRole('USER') and #userId == authentication.principal.id")
    public List<Order> getUserOrders(Long userId) {
        // 業務邏輯
    }
    
    @PreAuthorize("hasRole('ADMIN')")
    public List<Order> getAllOrders() {
        // 業務邏輯
    }
}

4.3 分布式權限服務

對于復雜的權限模型,可以創建獨立的權限服務:

// 權限服務接口
public interface PermissionService {
    
    boolean hasPermission(String userId, String resource, String action);
    
    List<String> getUserPermissions(String userId);
}

// 權限服務實現
@Service
public class PermissionServiceImpl implements PermissionService {
    
    private final PermissionRepository permissionRepository;
    
    @Override
    public boolean hasPermission(String userId, String resource, String action) {
        // 查詢數據庫或緩存中的權限信息
        return permissionRepository.existsByUserIdAndResourceAndAction(
            userId, resource, action);
    }
    
    @Override
    public List<String> getUserPermissions(String userId) {
        return permissionRepository.findByUserId(userId)
                .stream()
                .map(permission -> permission.getResource() + ":" + permission.getAction())
                .collect(Collectors.toList());
    }
}

// 自定義權限校驗注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("@permissionService.hasPermission(authentication.principal.id, #resource, #action)")
public @interface CheckPermission {
    String resource();
    String action();
}

// 使用自定義權限注解
@Service
public class BusinessService {
    
    @CheckPermission(resource = "order", action = "read")
    public Order getOrder(Long orderId) {
        // 業務邏輯
    }
}

5. 實戰案例:電商平臺會話管理設計

假設我們有一個電商平臺,包含用戶服務、商品服務、訂單服務和支付服務。以下是一個完整的設計方案:

5.1 架構設計

用戶請求 → API網關 → [認證過濾器] → [路由到具體服務]

5.2 會話流程

  • 用戶登錄用戶服務,獲取JWT令牌
  • 令牌存儲在客戶端(Cookie或LocalStorage)
  • 后續請求攜帶令牌訪問API網關
  • 網關驗證令牌并提取用戶信息
  • 網關將用戶信息添加到請求頭轉發給下游服務
  • 各服務根據用戶信息進行業務處理和權限校驗

5.3 代碼實現

// 網關認證過濾器增強版
@Component
public class EnhancedAuthFilter implements GlobalFilter {
    
    private final JwtTokenProvider tokenProvider;
    private final PermissionService permissionService;
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String path = exchange.getRequest().getPath().value();
        String method = exchange.getRequest().getMethodValue();
        
        // 跳過登錄和公開端點
        if (isPublicEndpoint(path, method)) {
            return chain.filter(exchange);
        }
        
        // 提取和驗證令牌
        String token = extractToken(exchange.getRequest());
        if (!tokenProvider.validateToken(token)) {
            return unauthorized(exchange.getResponse());
        }
        
        // 提取用戶信息
        User user = tokenProvider.extractUser(token);
        
        // 權限校驗
        if (!hasPermission(user, path, method)) {
            return forbidden(exchange.getResponse());
        }
        
        // 添加用戶信息到請求頭
        ServerHttpRequest modifiedRequest = addUserHeaders(exchange.getRequest(), user);
        
        return chain.filter(exchange.mutate().request(modifiedRequest).build());
    }
    
    private boolean hasPermission(User user, String path, String method) {
        // 將路徑和方法映射為權限資源
        String resource = mapPathToResource(path);
        String action = mapMethodToAction(method);
        
        return permissionService.hasPermission(user.getId(), resource, action);
    }
    
    private ServerHttpRequest addUserHeaders(ServerHttpRequest request, User user) {
        return request.mutate()
                .header("X-User-Id", user.getId().toString())
                .header("X-User-Name", user.getUsername())
                .header("X-User-Roles", String.join(",", user.getRoles()))
                .build();
    }
}

6. 安全考慮與最佳實踐

6.1 安全措施

  • 使用HTTPS:防止令牌被竊取
  • 設置合理的令牌過期時間:減少令牌泄露風險
  • 使用刷新令牌機制:避免用戶頻繁登錄
  • 實施令牌黑名單:用于注銷或撤銷特定令牌
  • 防范CSRF攻擊:使用Anti-CSRF令牌

6.2 性能優化

  • 緩存用戶權限數據:減少數據庫查詢
  • 使用高效的令牌驗證算法:如非對稱加密驗證簽名
  • 實施分布式緩存:存儲會話和權限數據

6.3 監控與日志

  • 記錄認證日志:用于安全審計和故障排查
  • 監控異常登錄行為:及時發現潛在攻擊
  • 實施速率限制:防止暴力破解

結論

在微服務架構下,會話管理和單點登錄的實現需要綜合考慮無狀態設計、分布式存儲、安全性和性能等多個方面。通過采用JWT、OAuth 2.0/OpenID Connect等標準協議,結合API網關的統一鑒權和服務內的細粒度權限控制,可以構建出安全、高效且可擴展的會話管理系統。

實際實施時,需要根據具體業務需求選擇合適的方案,并在安全性和用戶體驗之間找到平衡點。隨著技術的不斷發展,云原生和Service Mesh等新技術也為微服務會話管理帶來了新的解決方案,值得持續關注和學習。

無論選擇哪種方案,都應遵循最小權限原則、縱深防御等安全理念,確保系統的安全性和可靠性。同時,完善的監控和日志記錄也是不可或缺的部分,它們不僅能幫助及時發現和解決問題,還能為系統的持續優化提供數據支持。

責任編輯:武曉燕 來源: 程序員秋天
相關推薦

2022-05-12 07:37:51

單點登錄微服務開源

2023-11-20 15:32:29

2017-09-10 16:21:55

微服務API權限

2023-07-28 09:23:24

微服務架構

2017-03-14 11:52:52

微服務架構數據管理

2024-12-27 10:12:28

2024-04-09 07:27:06

微服務架構YAML

2017-07-17 15:50:17

微服務Docker架構

2021-06-22 18:00:09

微服務架構系統

2020-09-29 07:00:00

微服務API架構

2016-12-26 18:05:00

單點登錄原理簡單實現

2015-05-25 13:44:42

微服務微服務架構Docker

2019-07-12 14:41:31

微服務Kubernetes容器

2019-12-26 15:49:14

微服務架構業務

2023-07-27 14:03:51

微服務

2024-07-02 10:58:53

2022-08-14 07:04:44

微服務架構設計模式

2019-10-16 08:41:46

微服務架構Nginx

2023-08-31 17:13:01

架構軟件開發

2023-08-27 16:13:50

架構微服務器
點贊
收藏

51CTO技術棧公眾號

欧美人交a欧美精品| 精品国产乱码久久久久久婷婷| 国产精品国产三级国产aⅴ9色| 久久亚洲无码视频| 高清一区二区三区av| 亚洲成人精品一区二区| 欧美日韩一区二区视频在线 | 午夜视频在线网站| 不卡av免费观看| 中文字幕无码乱码人妻日韩精品| 亚洲一区 二区| 色综合久久99| 精品一区二区三区毛片| 欧美精品a∨在线观看不卡| 另类人妖一区二区av| 国内精品一区二区三区四区| 中文字幕第24页| 91九色鹿精品国产综合久久香蕉| 色欧美乱欧美15图片| 性高湖久久久久久久久aaaaa| 国内精品一区视频| 国产成人亚洲综合a∨婷婷| 国产精品高清免费在线观看| 久草视频在线免费看| 四季av一区二区凹凸精品| 日韩精品免费观看| 2025中文字幕| 伊人久久一区| 在线免费视频一区二区| 老太脱裤子让老头玩xxxxx| 成人影欧美片| 亚洲国产成人午夜在线一区| 麻豆视频成人| 人妻精品无码一区二区| 国产精品中文字幕日韩精品| 国产精品老女人视频| 国产又粗又爽视频| 一本综合久久| 久久久久久久影院| 黄色在线观看免费| 中文字幕亚洲精品乱码| 日韩一区二区三区在线播放| 欧美波霸videosex极品| 精品国产aⅴ| 亚洲一区二区久久久| 成人h动漫精品一区| 老牛国内精品亚洲成av人片| 欧美tickling网站挠脚心| 欧美一级大片免费看| 国产精品久久中文字幕| 日本一本高清视频| 欧美日韩国产精品一区二区亚洲| 久久久精品视频成人| 国内毛片毛片毛片毛片毛片| 成人中文在线| 色久欧美在线视频观看| av资源在线免费观看| 欧美亚洲在线日韩| 色噜噜国产精品视频一区二区| 超碰人人干人人| 成人激情诱惑| 久热在线中文字幕色999舞| www.av成人| 欧美日韩岛国| 国产91精品久久久| 久久国产乱子伦精品| 日韩成人午夜电影| 91久久国产精品91久久性色| 性生活视频软件| www.视频一区| 欧美主播一区二区三区美女 久久精品人 | 国产精品av久久久久久麻豆网| 精品国偷自产在线视频| 免费一级a毛片夜夜看| 狠狠综合久久| 国产成人精品免费视频| 精品乱码一区内射人妻无码| 国内精品第一页| 翡翠波斯猫1977年美国| 日本天堂在线| 中文字幕一区二区三区蜜月| 黄色网络在线观看| 三级中文字幕在线观看| 在线日韩国产精品| 久草福利在线观看| 亚洲人成网www| 最近2019中文免费高清视频观看www99| 成人在线观看高清| 亚洲国产一区二区精品专区| 国产精品精品视频| 久久精品无码专区| 精品无码人妻一区二区三区| 亚洲精品一二三区区别| 欧美激情网友自拍| 黄色污污网站在线观看| 国产一区二区伦理片| 韩国成人av| 日韩子在线观看| 亚洲成人午夜影院| 国产又大又黄又粗又爽| 91嫩草精品| 这里只有视频精品| 久久97人妻无码一区二区三区| 久久久夜精品| 99视频国产精品免费观看| 每日更新av在线播放| 亚洲人成电影网站色mp4| 春日野结衣av| 欧洲精品99毛片免费高清观看 | 国产精品ⅴa有声小说| 亚洲欧美另类图片小说| 欧美性大战久久久久xxx| 国产高清亚洲| 亚洲最新av网址| 欧美亚洲天堂网| 韩国女主播成人在线观看| 欧美精品尤物在线| aa国产成人| 日韩欧美一卡二卡| 午夜激情视频在线播放| 久色成人在线| 国产精品日韩欧美一区二区| 日本免费视频在线观看| 欧美日韩一区二区精品| 伊人av在线播放| 偷拍欧美精品| 国产精品免费久久久久久| 你懂的在线免费观看| 亚洲一区在线观看免费观看电影高清| 在线黄色免费看| 国产尤物久久久| 97视频在线免费观看| 国产草草影院ccyycom| 中文乱码免费一区二区| 日韩中文字幕免费在线 | 亚洲 国产 欧美一区| 欧美伦理91| 亚洲精品mp4| 久久精品免费在线| 国产成人99久久亚洲综合精品| 一区不卡字幕| 欧美日韩免费电影| 视频直播国产精品| 中文字幕无线码一区| 国产精品网曝门| 91视频免费版污| 国产一区二区三区日韩精品| 欧美与黑人午夜性猛交久久久| 姝姝窝人体www聚色窝| 亚洲综合成人在线| 香蕉视频在线观看黄| 欧美日韩一区二区三区四区在线观看| 亚洲综合在线小说| 伦理av在线| 亚洲成人免费网站| 日韩精品视频免费播放| 成人免费高清在线| 青青在线免费观看| 精品久久ai电影| 日本乱人伦a精品| 国产综合视频一区二区三区免费| 欧洲国产伦久久久久久久| 欧美激情久久久久久久| 黑人巨大精品欧美一区| 一级特黄妇女高潮| 国产一区二区三区亚洲| 97超级碰碰人国产在线观看| 日本福利在线观看| 欧美最新大片在线看| 91ts人妖另类精品系列| 国产精品自拍毛片| 黄页网站大全在线观看| 蜜桃精品噜噜噜成人av| 国产美女精品视频免费观看| a级影片在线| 亚洲国产毛片完整版| 久久久久久无码午夜精品直播| 国产精品青草久久| 制服.丝袜.亚洲.中文.综合懂| 日韩午夜免费| 欧美在线视频二区| 精品国产伦一区二区三区观看说明| 欧美激情视频在线| 韩国福利在线| 日韩欧美国产小视频| 日韩精品1区2区| 国产精品国产三级国产aⅴ中文| 九色91porny| 美女视频一区免费观看| 亚洲精品乱码视频| 国产精品99久久免费观看| 国产成人久久久| 日日夜夜天天综合入口| 日韩高清免费观看| 国产一区二区网站| 香蕉影视欧美成人| 日日碰狠狠添天天爽| 成人免费的视频| 天天干天天草天天| 亚洲另类自拍| 久久免费看毛片| 一道本一区二区三区| 成人在线播放av| 2022成人影院| 色综合久久久久久中文网| 国产色在线 com| 亚洲成人av片| 亚洲一区中文字幕在线| 欧美天堂在线观看| 中文字幕手机在线观看| 国产欧美日韩精品一区| zjzjzjzjzj亚洲女人| 久久精品国内一区二区三区| www国产精品内射老熟女| 国产精品久久久久久久免费观看| 久久精品成人一区二区三区蜜臀 | 欧美日韩精品久久久| 精品成人久久久| 有坂深雪av一区二区精品| 精品人妻中文无码av在线| 99久久综合狠狠综合久久| 国产又粗又长又爽又黄的视频| 久久国产99| 免费无码毛片一区二三区| 久久综合成人| 日韩不卡av| 色婷婷久久久| 国产一区国产精品| 亚洲国产中文在线| 亚洲aⅴ日韩av电影在线观看 | 91久久精品国产91久久性色tv| jizz亚洲女人高潮大叫| 国产精品video| 黄色亚洲网站| 日韩av免费网站| 三上悠亚亚洲一区| 日韩av毛片网| 日韩a**中文字幕| 日本国产一区二区三区| 第一福利在线视频| 97久久精品人人澡人人爽缅北| 在线观看免费视频你懂的| 蜜臀久久99精品久久久无需会员| 91精品国产综合久久久久久豆腐| 亚洲午夜久久久久久久| 久久国产精品高清一区二区三区| 国产婷婷成人久久av免费高清| 欧美在线精品一区二区三区| 精品国产制服丝袜高跟| 超碰在线观看av| 欧美草草影院在线视频| 蜜臀久久99精品久久久| 精品久久久久99| 色网站免费观看| 日韩电影中文字幕av| 无码国产精品一区二区免费16| 亚洲精品久久久久久久久| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 99re视频精品| 免费看污黄网站在线观看| 久久综合久色欧美综合狠狠| 无码 人妻 在线 视频| 国产精品色在线| 免费国产羞羞网站美图| 一二三四区精品视频| 中文字幕一区二区三区手机版 | 久久综合久久美利坚合众国| 亚洲综合伊人久久大杳蕉| 欧美精品999| 伊人久久综合一区二区| 国产精品偷伦视频免费观看国产 | 香蕉久久夜色精品国产| 三级在线免费看| 国产精品18久久久久久久久| 污污免费在线观看| 久久综合色综合88| 国产又粗又长又黄的视频| 亚洲色图视频网| 日本熟妇色xxxxx日本免费看| 欧美日韩免费一区| 中文字幕一区二区久久人妻| 日韩一区二区在线观看视频播放| 亚洲精品一区二区三区四区| 亚洲欧美国产一区二区三区 | 国产精品入口麻豆九色| 欧美丰满艳妇bbwbbw| 欧美日韩一区二区在线| 又骚又黄的视频| 亚洲精品一区在线观看| 懂色av中文在线| 欧美激情网友自拍| 成人不卡视频| 国产精品亚洲综合| 欧美韩日高清| 欧美黑人经典片免费观看| 蜜臀av一区二区三区| 黄色在线免费播放| 国产精品伦一区| 天天操中文字幕| 日韩一级大片在线观看| 国产香蕉在线| 午夜精品理论片| 国产精品成人**免费视频| 韩国成人一区| 欧美va天堂在线| 欧美性猛交久久久乱大交小说| 国产二区国产一区在线观看| 亚洲成人黄色av| 亚洲成人免费在线观看| 91亚洲国产成人精品一区| 亚洲精品中文字| 尤物yw193can在线观看| 国产精品私拍pans大尺度在线| 爽爽窝窝午夜精品一区二区| 激情五月五月婷婷| 麻豆精品在线播放| 免费a级黄色片| 一二三区精品视频| 国产精品无码免费播放| 亚洲欧洲高清在线| 国产激情在线播放| 超碰97人人在线| 久久久久久久久国产一区| 波多结衣在线观看| 久久精品亚洲乱码伦伦中文| 日韩成人在线免费视频| 欧美电影免费提供在线观看| 黄色网址在线免费播放| 国产精品九九久久久久久久| 日韩欧美ww| 成年人网站免费视频| 成人性生交大片免费看中文网站| 顶级黑人搡bbw搡bbbb搡| 欧美亚洲高清一区| 搞黄视频免费在线观看| 日本一区二区不卡| 亚洲制服欧美另类| 日本久久久精品视频| 91亚洲国产成人精品一区二区三 | 亚洲最大福利视频网站| 亚洲成av人片乱码色午夜| 中文字幕1234区| 国产精品嫩草久久久久| 一级黄色大片网站| 精品国产一区二区在线| 亚洲成人毛片| 波多野结衣激情| 国产成人午夜片在线观看高清观看| 色欲一区二区三区精品a片| 欧美福利视频一区| 成人影院在线观看| 成人欧美一区二区三区在线观看| 欧美日韩一卡| 性久久久久久久久久久| 欧美日韩免费看| 黄色av网站在线| 国产精品专区h在线观看| 午夜精品视频一区二区三区在线看| 亚洲黄色片免费看| 亚洲一区免费视频| 手机看片一区二区三区| 国产97色在线|日韩| 日本久久综合| 国产在线观看中文字幕| 一区二区三区四区在线播放 | 久久亚洲国产成人精品无码区| 成人在线视频一区二区| 国内精品福利视频| 在线精品国产欧美| 精品视频在线观看免费观看| 免费人成在线观看视频播放| www.日韩大片| 最新中文字幕免费| 欧美成人在线免费| 女同另类激情重口| 91看片在线免费观看| 亚洲精品乱码久久久久| 神马午夜一区二区| 国产精品久久久久一区二区| 97精品一区| 中文字幕 亚洲一区| 欧美丝袜丝交足nylons图片| av在线播放国产| 久久久久久国产精品免费免费| 日韩av网站在线观看| 日本a级片视频| 日韩精品视频在线免费观看| 国产精品久久久久久妇女| 国产经典久久久| wwwwxxxxx欧美| 国产又粗又猛又黄又爽无遮挡| 性欧美在线看片a免费观看| 日韩成人精品一区二区| 性农村xxxxx小树林| 欧美日韩久久久久久| 国产不卡123| 小说区视频区图片区| 91网页版在线| 成人黄色免费视频| 国产精品激情自拍|