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

靈活!Spring Boot 自定義注解結(jié)合參數(shù)解析器實(shí)現(xiàn)權(quán)限控制

開發(fā) 前端
在實(shí)際項(xiàng)目中,該方案適用于對(duì)性能和靈活性要求較高的場(chǎng)景,開發(fā)者可以在此基礎(chǔ)上,結(jié)合自身業(yè)務(wù)需求,進(jìn)一步優(yōu)化和擴(kuò)展,如 動(dòng)態(tài)權(quán)限配置、RBAC(基于角色的訪問(wèn)控制) 等。

在現(xiàn)代 Web 應(yīng)用開發(fā)中,權(quán)限控制是至關(guān)重要的一個(gè)環(huán)節(jié),尤其是在微服務(wù)架構(gòu)和前后端分離的模式下。如何在保證安全性的同時(shí),兼顧開發(fā)的便捷性和代碼的可讀性,是開發(fā)者需要重點(diǎn)關(guān)注的問(wèn)題。

Spring Boot 提供了多種方式來(lái)實(shí)現(xiàn)權(quán)限管理,例如 Spring Security,但在某些場(chǎng)景下,我們希望有更輕量級(jí)、靈活的權(quán)限控制方案。本篇文章將介紹如何通過(guò) Spring Boot 3.4 中的 自定義注解 結(jié)合 AOP 和 參數(shù)解析器,實(shí)現(xiàn)一套可擴(kuò)展的權(quán)限控制方案。

本方案的核心思路是:

  1. 通過(guò) AOP 攔截 
    需要權(quán)限校驗(yàn)的方法,實(shí)現(xiàn)全局權(quán)限校驗(yàn)邏輯。
  2. 通過(guò)攔截器(Interceptor) 
    解析請(qǐng)求 Token,并將用戶信息存儲(chǔ)到上下文中,方便后續(xù)權(quán)限校驗(yàn)使用。
  3. 使用自定義參數(shù)解析器(HandlerMethodArgumentResolver) 
    在 Controller 方法參數(shù)中,通過(guò)注解直接獲取當(dāng)前登錄用戶信息,提高代碼的可讀性。
  4. 支持 SpEL(Spring 表達(dá)式語(yǔ)言) 
    以動(dòng)態(tài)方式獲取用戶數(shù)據(jù),實(shí)現(xiàn)更靈活的權(quán)限控制。

本文將結(jié)合代碼示例,詳細(xì)介紹該方案的實(shí)現(xiàn)方式,并最終構(gòu)建一套完整的權(quán)限校驗(yàn)框架。

自定義注解

獲取當(dāng)前用戶信息的注解

package com.icoderoad.auth;


import java.lang.annotation.*;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface AuthUser {
    /** 通過(guò) SpEL 表達(dá)式從當(dāng)前登錄用戶信息中提取數(shù)據(jù) */
    String value() default "";
}

權(quán)限控制注解

package com.icoderoad.auth;


import java.lang.annotation.*;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PreAuthorize {
    /** 需要的權(quán)限 */
    String[] value() default {};


    /** 權(quán)限校驗(yàn)邏輯(全部匹配或部分匹配) */
    Logical logic() default Logical.AND;


    enum Logical {
        AND, OR;
    }
}

核心組件實(shí)現(xiàn)

生成 Token 的工具類

package com.icoderoad.utils;


import com.fasterxml.jackson.databind.ObjectMapper;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


import java.util.*;
import java.util.function.Function;


@Component
public class JwtUtil {
    @Value("${jwt.secret}")
    private String secret;


    @Value("${jwt.expiration}")
    private Long expiration;


    private final ObjectMapper objectMapper;


    public JwtUtil(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }


    /** 生成 JWT 令牌 */
    public String generateToken(User user) {
        try {
            String payload = objectMapper.writeValueAsString(user);
            return createToken(payload);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }


    private String createToken(String payload) {
        return Jwts.builder()
            .claim("info", payload)
            .subject("auth_token")
            .issuedAt(new Date())
            .expiration(new Date(System.currentTimeMillis() + expiration * 1000))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes()))
            .compact();
    }


    /** 解析 Token 獲取用戶信息 */
    public User getUser(String token) {
        try {
            String info = (String) getClaimFromToken(token, claims -> claims.get("info"));
            return objectMapper.readValue(info, User.class);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    private <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) {
        Claims claims = Jwts.parserBuilder()
            .setSigningKey(Keys.hmacShaKeyFor(secret.getBytes()))
            .build()
            .parseClaimsJws(token)
            .getBody();
        return claimsResolver.apply(claims);
    }
}

認(rèn)證攔截器

package com.icoderoad.interceptor;


import com.icoderoad.utils.JwtUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.regex.*;


@Component
public class AuthInterceptor implements HandlerInterceptor {
    private static final Pattern AUTH_PATTERN = Pattern.compile("^Bearer (?<token>[a-zA-Z0-9-._~+/]+=*)$", Pattern.CASE_INSENSITIVE);


    private final JwtUtil jwtUtil;
    private final ObjectMapper objectMapper;


    public AuthInterceptor(JwtUtil jwtUtil, ObjectMapper objectMapper) {
        this.jwtUtil = jwtUtil;
        this.objectMapper = objectMapper;
    }


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
        if (authorization == null || !authorization.startsWith("Bearer ")) {
            sendError(response, "缺失 Token");
            return false;
        }


        Matcher matcher = AUTH_PATTERN.matcher(authorization);
        if (!matcher.matches()) {
            sendError(response, "無(wú)效 Token");
            return false;
        }


        User user = jwtUtil.getUser(matcher.group("token"));
        if (user == null) {
            sendError(response, "登錄失效,請(qǐng)重新登錄");
            return false;
        }


        SecurityContext.setUser(user);
        return true;
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        SecurityContext.clear();
    }


    private void sendError(HttpServletResponse response, String message) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().print(objectMapper.writeValueAsString(Map.of("code", -1, "message", message)));
    }
}

權(quán)限切面

package com.icoderoad.aspect;


import com.icoderoad.annotation.PreAuthorize;
import com.icoderoad.context.SecurityContext;
import com.icoderoad.exception.AuthException;
import com.icoderoad.model.User;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;


import java.util.Collections;
import java.util.Set;


@Aspect
@Component
public class PermissionAspect {
    @Around("@annotation(preAuthorize)")
    public Object checkPermission(ProceedingJoinPoint joinPoint, PreAuthorize preAuthorize) throws Throwable {
        User user = SecurityContext.getUser();
        if (user == null) {
            throw new AuthException("請(qǐng)先登錄");
        }


        Set<String> requiredPerms = Set.of(preAuthorize.value());
        Set<String> userPerms = user.getPermissions();
        boolean hasPermission = validatePermissions(requiredPerms, userPerms, preAuthorize.logic());


        if (!hasPermission) {
            throw new AuthException("權(quán)限不足");
        }


        return joinPoint.proceed();
    }


    private boolean validatePermissions(Set<String> required, Set<String> has, PreAuthorize.Logical logic) 		{
        return logic == PreAuthorize.Logical.AND ? has.containsAll(required) : !Collections.disjoint(required, has);
    }
}

配置攔截器

package com.icoderoad.config;


import com.icoderoad.interceptor.AuthInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;


@Configuration
public class WebConfig implements WebMvcConfigurer {
    private final AuthInterceptor authInterceptor;


    public WebConfig(AuthInterceptor authInterceptor) {
        this.authInterceptor = authInterceptor;
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor).addPathPatterns("/users/**");
    }
}

測(cè)試

package com.icoderoad.controller;


import com.icoderoad.model.User;
import com.icoderoad.util.JwtUtil;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;


import java.util.Map;
import java.util.Set;


@RestController
public class LoginController {
    private final JwtUtil jwtUtil;


    public LoginController(JwtUtil jwtUtil) {
        this.jwtUtil = jwtUtil;
    }


    @GetMapping("/login")
    public ResponseEntity<Object> login(@RequestParam String username) {
        User user = new User(1L, username, Set.of("USER"));
        String token = jwtUtil.generateToken(user);
        return ResponseEntity.ok(Map.of("token", token));
    }
}

結(jié)論

通過(guò)本篇文章的學(xué)習(xí),我們基于 Spring Boot 3.4 實(shí)現(xiàn)了一套高效、靈活的權(quán)限控制方案,核心組件包括:

  1. 自定義注解 @PreAuthorize
    用于定義方法級(jí)權(quán)限控制。
  2. 攔截器(Interceptor)用于解析 Token 并獲取用戶信息。
  3. AOP 切面在方法執(zhí)行前進(jìn)行權(quán)限校驗(yàn)。
  4. 自定義參數(shù)解析器讓 Controller 層代碼更加簡(jiǎn)潔優(yōu)雅。

相比傳統(tǒng)的 Spring Security 方案,本方案的優(yōu)勢(shì)在于:

  • 更加輕量級(jí)不依賴復(fù)雜的認(rèn)證機(jī)制,僅需少量代碼即可實(shí)現(xiàn)。
  • 高度可擴(kuò)展可以靈活適配不同的認(rèn)證方式,如 JWT、OAuth2 等。
  • 代碼解耦業(yè)務(wù)邏輯與權(quán)限校驗(yàn)分離,提升可維護(hù)性。

在實(shí)際項(xiàng)目中,該方案適用于對(duì)性能和靈活性要求較高的場(chǎng)景,開發(fā)者可以在此基礎(chǔ)上,結(jié)合自身業(yè)務(wù)需求,進(jìn)一步優(yōu)化和擴(kuò)展,如 動(dòng)態(tài)權(quán)限配置、RBAC(基于角色的訪問(wèn)控制) 等。

如果你在 Spring Boot 3.4 版本的開發(fā)中,正在尋找一種 既安全又高效的權(quán)限控制方案,不妨嘗試本文介紹的方法,相信會(huì)給你的項(xiàng)目帶來(lái)新的啟發(fā)和幫助。


責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(guān)推薦

2025-03-10 01:00:00

Spring參數(shù)解析器

2022-07-11 10:37:41

MapPart集合

2021-03-16 10:39:29

SpringBoot參數(shù)解析器

2024-10-14 17:18:27

2013-01-14 11:40:50

IBMdW

2022-05-11 10:45:21

SpringMVC框架Map

2022-01-06 06:23:49

Swagger參數(shù)解析器

2022-11-10 07:53:54

Spring參數(shù)校驗(yàn)

2017-08-03 17:00:54

Springmvc任務(wù)執(zhí)行器

2023-10-24 13:48:50

自定義注解舉值驗(yàn)證

2024-02-22 08:06:45

JSON策略解析器

2020-11-25 11:20:44

Spring注解Java

2024-09-10 10:04:47

2018-06-21 14:46:03

Spring Boot異步調(diào)用

2024-12-27 15:37:23

2025-09-26 05:00:00

2021-12-30 12:30:01

Java注解編譯器

2021-10-12 10:50:31

鴻蒙HarmonyOS應(yīng)用

2023-10-09 07:37:01

2024-10-09 10:46:41

springboot緩存redis
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

www.激情网| 欧亚精品在线观看| 亚洲黄色片免费| av网址在线免费观看| 精品综合久久久久久8888| 日韩在线视频免费观看高清中文| 91久久精品一区二区别| 久久久久久国产精品免费播放| 高清精品在线| 久久久五月婷婷| 成人免费网站在线看| 精品小视频在线观看| 国产日产精品_国产精品毛片| 中文字幕在线不卡一区二区三区| 亚洲国产精品va在线| 东京热加勒比无码少妇| 蜜桃视频网站在线观看| 99久久国产综合精品女不卡| 国产精品久久久久久久久久新婚 | 亚洲欧洲国产日韩精品| 国产精品久久久久久久久毛片 | 精品国产网站地址| 在线精品视频播放| 国产v综合v| 亚洲精品国产高清久久伦理二区| 91免费人成网站在线观看18| 亚洲精品午夜国产va久久成人| 麻豆成人入口| 精品视频999| 91好吊色国产欧美日韩在线| 国产视频在线播放| 国产区在线观看成人精品 | 久久一区二区视频| 国产精品永久免费在线| 欧美 日韩 精品| 亚洲天堂成人| 久久国产精品久久精品| av女人的天堂| 一本久久青青| 日韩av最新在线观看| 四虎成人在线播放| 亚洲一区av| 欧美这里有精品| www黄色av| 在线手机中文字幕| 亚洲一区二区不卡免费| 国产精品免费看久久久无码| av在线电影院| 国产情人综合久久777777| 美日韩精品免费| 日韩一级在线播放| 国产成人aaaa| 国产精品一区二区三区在线 | 在线观看91精品国产麻豆| 精品久久久久久久免费人妻| 性国裸体高清亚洲| 午夜不卡在线视频| 国产淫片免费看| 天堂资源在线| 一本大道综合伊人精品热热| 熟女性饥渴一区二区三区| 成人爱爱网址| 日本福利一区二区| 五月婷婷之综合激情| 电影一区二区| 欧美日本乱大交xxxxx| 国产精品自拍视频在线| 亚洲成人毛片| 日韩一级二级三级精品视频| 佐佐木明希电影| 欧美久久香蕉| 亚洲欧洲免费视频| 18啪啪污污免费网站| 99国产精品一区二区| 精品国产一区二区三区久久狼5月| 97中文字幕在线观看| 天堂久久av| 亚洲精品ady| 人妻少妇一区二区| 日韩在线二区| 色综合色综合网色综合| 国产污视频在线看| 日韩视频不卡| 日本在线观看天堂男亚洲| 一级一级黄色片| 激情综合五月婷婷| 国产精品v欧美精品∨日韩| 涩爱av在线播放一区二区| 国产喂奶挤奶一区二区三区| 影音先锋欧美资源| 大桥未久在线播放| 色猫猫国产区一区二在线视频| 国产成人三级视频| av成人 com a| 欧美视频在线观看一区| 国产精品igao网网址不卡| 福利欧美精品在线| 在线观看免费高清视频97| 亚洲AV成人无码精电影在线| 精品福利电影| 国产精品日本精品| 高h放荡受浪受bl| 久久婷婷久久一区二区三区| 一区二区在线中文字幕电影视频| 欧美在线一卡| 国产精品久久久久久久久图文区 | 人妻一区二区三区| 91亚洲精品久久久蜜桃网站 | 国产精品久久99| www.成年人视频| 视频在线日韩| 亚洲电影在线看| 亚洲女人久久久| 美女国产一区| 成人自拍视频网站| 日本免费视频在线观看| 欧美视频在线看| 国产精九九网站漫画| 99re6这里只有精品| 欧美一区二区三区免费观看| 亚洲av无码乱码国产精品| 国产精品网站一区| 精品国产成人av在线免| 国产成人aa在线观看网站站| 久久韩剧网电视剧| 久久久久久无码午夜精品直播| 国产精品综合色区在线观看| 成人国产精品av| 韩国福利在线| 日韩欧美在线视频观看| 艳妇乳肉豪妇荡乳xxx| 一区二区蜜桃| 国产精品嫩草影院久久久| 欧美777四色影视在线| 性做久久久久久久久| 色欲无码人妻久久精品| 婷婷亚洲综合| 成人免费xxxxx在线观看| 成人亚洲综合天堂| 色综合视频一区二区三区高清| www.涩涩涩| 极品美女一区二区三区| 日本一区二区三区四区视频| 日本福利片高清在线观看| 精品久久久久久电影| 亚洲色偷偷色噜噜狠狠99网| 黄色在线成人| 国产欧美综合精品一区二区| 国产三线在线| 精品国产免费一区二区三区四区 | 国产欧美一区二区精品仙草咪| 亚洲高清不卡一区| 成人性教育av免费网址| 亚洲精品理论电影| 中文字幕亚洲高清| 91日韩一区二区三区| 欧美s码亚洲码精品m码| 日韩mv欧美mv国产网站| 欧美一级淫片播放口| 日本人妖在线| 欧美在线免费视屏| 亚洲女优在线观看| 蜜桃精品在线观看| 日日噜噜噜夜夜爽爽| 国产一区二区三区亚洲综合| 欧美另类69精品久久久久9999| 中文在线第一页| 国产亚洲欧美日韩俺去了| 9久久婷婷国产综合精品性色 | 高清电影在线观看免费| 亚洲成在人线av| 五月激情六月丁香| 国产蜜臀97一区二区三区| 亚洲小视频网站| 一区二区三区四区日韩| 成人区精品一区二区| 男人久久天堂| 亚洲天堂成人在线视频| 一二三四区在线| 一卡二卡欧美日韩| 久久精品国产亚洲av麻豆| 青青草91视频| 久久精品在线免费视频| 加勒比久久高清| 国产精品久久久久久久9999| 成人影院在线看| 日韩国产激情在线| 亚洲一区二区色| 亚洲国产乱码最新视频| 69精品无码成人久久久久久| 精品一区二区三区免费观看| 男人的天堂狠狠干| 成人激情免费视频| 国产免费一区| 国产成人精品一区二区三区免费 | 精品成人av一区二区三区| 麻豆精品视频在线观看免费| www.avtt| 欧美r级电影| 国产伦精品一区二区三区视频黑人 | 日韩在线视频观看正片免费网站| 日本中文字幕第一页| 亚洲欧洲精品一区二区三区| 成人啪啪18免费游戏链接| 日产国产欧美视频一区精品| www.亚洲成人网| 日韩激情图片| 就去色蜜桃综合| 91欧美日韩在线| 国产日韩欧美自拍| 亚洲天堂资源| 久久久久久av| 国产丝袜在线| 日韩中文字幕在线精品| 亚洲三级中文字幕| 欧美成人精品1314www| 中文字幕在线观看视频一区| 欧美日韩免费在线观看| 欧美成人一区二区三区高清| 国产精品系列在线| 中文字幕人妻一区二区| 成人黄页在线观看| 91av免费观看| 精品一区二区日韩| 美女少妇一区二区| 久久九九国产| 亚洲午夜精品久久久久久人妖| 九九综合九九| 精品国产免费人成电影在线观...| 鲁鲁在线中文| 欧美精品videosex极品1| 在线看黄色av| 国产一区二区三区18| 性xxxx视频| 亚洲精品成人久久电影| 亚洲产国偷v产偷v自拍涩爱| 在线成人av网站| 91亚洲国产成人久久精品麻豆 | 国产又黄又猛又粗又爽| 亚洲高清免费在线| 免费在线观看av网址| 亚洲美女视频在线观看| 日韩精品123区| 中文字幕一区二区三| 精品一区二区在线观看视频| 中文字幕免费不卡在线| www.av天天| 久久久久99精品国产片| 免费人成又黄又爽又色| 久久精品视频网| 免费看黄色aaaaaa 片| 91免费版在线| 中文字幕 自拍| 欧美国产激情二区三区| 亚洲一级黄色录像| 中文字幕在线不卡视频| 极品久久久久久| 亚洲在线视频一区| 国产一级视频在线| 同产精品九九九| 国产成人无码av| 欧美午夜免费电影| 国产精品呻吟久久| 日韩女优制服丝袜电影| 国产18精品乱码免费看| 亚洲高清福利视频| 韩日在线视频| 久久精品国产96久久久香蕉| 色老头在线观看| 97在线免费观看| 欧美在线极品| 国产精品一区av| 欧美电影院免费观看| 国产亚洲欧美一区二区| 蜜桃精品wwwmitaows| 亚洲乱码一区二区三区| 欧美aⅴ99久久黑人专区| 三上悠亚久久精品| 日本欧美在线看| 无套内谢丰满少妇中文字幕| 成a人片国产精品| 精品无人区无码乱码毛片国产 | 欧美一区二区三区免费观看视频| 免费在线观看黄网站| 色噜噜狠狠一区二区三区果冻| 国产真实的和子乱拍在线观看| 国产精品网站在线观看| 日韩丰满少妇无码内射| 最新欧美精品一区二区三区| 国产亚洲精品女人久久久久久| 一区精品在线播放| 国产一级特黄毛片| 欧美熟乱第一页| 殴美一级特黄aaaaaa| 中文精品99久久国产香蕉| 黄色在线看片| 国产精品欧美日韩久久| 国产精品极品在线观看| 天堂资源在线亚洲资源| 伊人狠狠色j香婷婷综合| 国产三级三级三级看三级| 国产激情91久久精品导航 | 欧美特级黄色片| 日韩午夜小视频| 风间由美一区| 国内精品久久久| 国产在线|日韩| 国产区欧美区日韩区| 国产精品成久久久久| 夫妻免费无码v看片| 国产精品综合在线视频| 中文字幕网站在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 欧美亚洲天堂网| 在线播放日韩导航| 蜜桃免费在线| 久久免费国产视频| 欧美日韩伦理一区二区| 欧美高清视频一区| 激情婷婷欧美| wwwxxxx在线观看| 亚洲欧美综合色| 久久久国产免费| 国产婷婷色综合av蜜臀av| 国内小视频在线看| 91九色单男在线观看| 欧美oldwomenvideos| 九一精品在线观看| 2020日本不卡一区二区视频| 久久精品视频9| 日韩免费观看高清完整版| 免费网站看v片在线a| 国产精品国产自产拍高清av水多| 亚洲国产一区二区久久| 特级西西444www大精品视频| 麻豆精品91| 亚洲人成人无码网www国产| 精品福利在线观看| 欧美 日韩 国产 成人 在线 91| 日韩黄在线观看| 久久免费电影| 国产精品xxxx| 亚洲三级网站| 91丝袜在线观看| 午夜精品久久久久影视| 亚洲女同志亚洲女同女播放| 欧美片一区二区三区| 日本免费一区二区三区视频| 日韩精品福利片午夜免费观看| 久久久久国产精品午夜一区| av免费观看不卡| 午夜电影网亚洲视频| 青青青免费视频在线2| 欧美孕妇孕交黑巨大网站| 综合亚洲色图| 好男人www社区| 欧美激情一区二区三区蜜桃视频 | av中文字幕免费观看| 黑人极品videos精品欧美裸| 天堂av在线免费观看| 欧美最猛性xxxxx(亚洲精品)| 国产成人精品一区二区三区视频 | xxxx国产视频| 亚洲综合色视频| 污视频软件在线观看| 全球成人中文在线| 成人影视亚洲图片在线| 夜夜夜夜夜夜操| 一区二区国产视频| 天天操天天爱天天干| 国产99视频在线观看| 久久国产精品亚洲人一区二区三区| 男人的天堂狠狠干| 久久久国产综合精品女国产盗摄| 一区二区成人免费视频| 欧美成人伊人久久综合网| 国内在线视频| 日韩和欧美的一区二区| 激情综合色综合久久| 黄色小视频在线免费看| 国产丝袜一区二区| 欧美黄页在线免费观看| 欧美黄网在线观看| 99re这里只有精品首页| 日本熟妇一区二区三区| 久久夜色精品国产| 日韩高清三区| 依人在线免费视频| 亚洲小说欧美激情另类| 国产日韩精品在线看| 91超碰在线电影| 久久国产66| 欧美三级 欧美一级| 亚洲欧洲激情在线| 视频在线观看免费影院欧美meiju| 中文字幕在线乱| 久久久精品2019中文字幕之3| 东京热一区二区三区四区| 日韩视频在线免费| 亚洲三级精品|