久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Spring Boot 接口參數加密解密的實現方法

瀏覽:9日期:2023-07-18 16:23:57

因為有小伙伴剛好問到這個問題,松哥就抽空擼一篇文章和大家聊聊這個話題。

加密解密本身并不是難事,問題是在何時去處理?定義一個過濾器,將請求和響應分別攔截下來進行處理也是一個辦法,這種方式雖然粗暴,但是靈活,因為可以拿到一手的請求參數和響應數據。不過 SpringMVC 中給我們提供了 ResponseBodyAdvice 和 RequestBodyAdvice,利用這兩個工具可以對請求和響應進行預處理,非常方便。

所以今天這篇文章有兩個目的:

分享參數/響應加解密的思路。 分享 ResponseBodyAdvice 和 RequestBodyAdvice 的用法。

好了,那么接下來就不廢話了,我們一起來看下。

1.開發加解密 starter

為了讓我們開發的這個工具更加通用,也為了復習一下自定義 Spring Boot Starter,這里我們就將這個工具做成一個 stater,以后在 Spring Boot 項目中直接引用就可以。

首先我們創建一個 Spring Boot 項目,引入 spring-boot-starter-web 依賴:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>provided</scope> <version>2.4.3</version></dependency>

因為我們這個工具是為 Web 項目開發的,以后必然使用在 Web 環境中,所以這里添加依賴時 scope 設置為 provided。

依賴添加完成后,我們先來定義一個加密工具類備用,加密這塊有多種方案可以選擇,對稱加密、非對稱加密,其中對稱加密又可以使用 AES、DES、3DES 等不同算法,這里我們使用 Java 自帶的 Cipher 來實現對稱加密,使用 AES 算法:

public class AESUtils { private static final String AES_ALGORITHM = 'AES/ECB/PKCS5Padding'; // 獲取 cipher private static Cipher getCipher(byte[] key, int model) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(key, 'AES'); Cipher cipher = Cipher.getInstance(AES_ALGORITHM); cipher.init(model, secretKeySpec); return cipher; } // AES加密 public static String encrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = getCipher(key, Cipher.ENCRYPT_MODE); return Base64.getEncoder().encodeToString(cipher.doFinal(data)); } // AES解密 public static byte[] decrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = getCipher(key, Cipher.DECRYPT_MODE); return cipher.doFinal(Base64.getDecoder().decode(data)); }}

這個工具類比較簡單,不需要多解釋。需要說明的是,加密后的數據可能不具備可讀性,因此我們一般需要對加密后的數據再使用 Base64 算法進行編碼,獲取可讀字符串。換言之,上面的 AES 加密方法的返回值是一個 Base64 編碼之后的字符串,AES 解密方法的參數也是一個 Base64 編碼之后的字符串,先對該字符串進行解碼,然后再解密。

接下來我們封裝一個響應工具類備用,這個大家如果經常看松哥視頻已經很了解了:

public class RespBean { private Integer status; private String msg; private Object obj; public static RespBean build() { return new RespBean(); } public static RespBean ok(String msg) { return new RespBean(200, msg, null); } public static RespBean ok(String msg, Object obj) { return new RespBean(200, msg, obj); } public static RespBean error(String msg) { return new RespBean(500, msg, null); } public static RespBean error(String msg, Object obj) { return new RespBean(500, msg, obj); } private RespBean() { } private RespBean(Integer status, String msg, Object obj) { this.status = status; this.msg = msg; this.obj = obj; } public Integer getStatus() { return status; } public RespBean setStatus(Integer status) { this.status = status; return this; } public String getMsg() { return msg; } public RespBean setMsg(String msg) { this.msg = msg; return this; } public Object getObj() { return obj; } public RespBean setObj(Object obj) { this.obj = obj; return this; }}

接下來我們定義兩個注解 @Decrypt 和 @Encrypt:

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.PARAMETER})public @interface Decrypt {}@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Encrypt {}

這兩個注解就是兩個標記,在以后使用的過程中,哪個接口方法添加了 @Encrypt 注解就對哪個接口的數據加密返回,哪個接口/參數添加了 @Decrypt 注解就對哪個接口/參數進行解密。這個定義也比較簡單,沒啥好說的,需要注意的是 @Decrypt 比 @Encrypt 多了一個使用場景就是 @Decrypt 可以用在參數上。

考慮到用戶可能會自己配置加密的 key,因此我們再來定義一個 EncryptProperties 類來讀取用戶配置的 key:

@ConfigurationProperties(prefix = 'spring.encrypt')public class EncryptProperties { private final static String DEFAULT_KEY = 'www.itboyhub.com'; private String key = DEFAULT_KEY; public String getKey() { return key; } public void setKey(String key) { this.key = key; }}

這里我設置了默認的 key 是 www.itboyhub.com,key 是 16 位字符串,松哥這個網站地址剛好滿足。以后如果用戶想自己配置 key,只需要在 application.properties 中配置 spring.encrypt.key=xxx 即可。

所有準備工作做完了,接下來就該正式加解密了。

因為松哥這篇文章一個很重要的目的是想和大家分享 ResponseBodyAdvice 和 RequestBodyAdvice 的用法,RequestBodyAdvice 在做解密的時候倒是沒啥問題,而 ResponseBodyAdvice 在做加密的時候則會有一些局限,不過影響不大,還是我前面說的,如果想非常靈活的掌控一切,那還是自定義過濾器吧。這里我就先用這兩個工具來實現了。

另外還有一點需要注意,ResponseBodyAdvice 在你使用了 @ResponseBody 注解的時候才會生效,RequestBodyAdvice 在你使用了 @RequestBody 注解的時候才會生效,換言之,前后端都是 JSON 交互的時候,這兩個才有用。不過一般來說接口加解密的場景也都是前后端分離的時候才可能有的事。

先來看接口加密:

@EnableConfigurationProperties(EncryptProperties.class)@ControllerAdvicepublic class EncryptResponse implements ResponseBodyAdvice<RespBean> { private ObjectMapper om = new ObjectMapper(); @Autowired EncryptProperties encryptProperties; @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return returnType.hasMethodAnnotation(Encrypt.class); } @Override public RespBean beforeBodyWrite(RespBean body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { byte[] keyBytes = encryptProperties.getKey().getBytes(); try { if (body.getMsg()!=null) { body.setMsg(AESUtils.encrypt(body.getMsg().getBytes(),keyBytes)); } if (body.getObj() != null) { body.setObj(AESUtils.encrypt(om.writeValueAsBytes(body.getObj()), keyBytes)); } } catch (Exception e) { e.printStackTrace(); } return body; }}

我們自定義 EncryptResponse 類實現 ResponseBodyAdvice 接口,泛型表示接口的返回類型,這里一共要實現兩個方法:

supports:這個方法用來判斷什么樣的接口需要加密,參數 returnType 表示返回類型,我們這里的判斷邏輯就是方法是否含有 @Encrypt 注解,如果有,表示該接口需要加密處理,如果沒有,表示該接口不需要加密處理。 beforeBodyWrite:這個方法會在數據響應之前執行,也就是我們先對響應數據進行二次處理,處理完成后,才會轉成 json 返回。我們這里的處理方式很簡單,RespBean 中的 status 是狀態碼就不用加密了,另外兩個字段重新加密后重新設置值即可。 另外需要注意,自定義的 ResponseBodyAdvice 需要用 @ControllerAdvice 注解來標記。

再來看接口解密:

@EnableConfigurationProperties(EncryptProperties.class)@ControllerAdvicepublic class DecryptRequest extends RequestBodyAdviceAdapter { @Autowired EncryptProperties encryptProperties; @Override public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return methodParameter.hasMethodAnnotation(Decrypt.class) || methodParameter.hasParameterAnnotation(Decrypt.class); } @Override public HttpInputMessage beforeBodyRead(final HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException { byte[] body = new byte[inputMessage.getBody().available()]; inputMessage.getBody().read(body); try { byte[] decrypt = AESUtils.decrypt(body, encryptProperties.getKey().getBytes()); final ByteArrayInputStream bais = new ByteArrayInputStream(decrypt); return new HttpInputMessage() { @Override public InputStream getBody() throws IOException { return bais; } @Override public HttpHeaders getHeaders() { return inputMessage.getHeaders(); } }; } catch (Exception e) { e.printStackTrace(); } return super.beforeBodyRead(inputMessage, parameter, targetType, converterType); }} 首先大家注意,DecryptRequest 類我們沒有直接實現 RequestBodyAdvice 接口,而是繼承自 RequestBodyAdviceAdapter 類,該類是 RequestBodyAdvice 接口的子類,并且實現了接口中的一些方法,這樣當我們繼承自 RequestBodyAdviceAdapter 時,就只需要根據自己實際需求實現某幾個方法即可。 supports:該方法用來判斷哪些接口需要處理接口解密,我們這里的判斷邏輯是方法上或者參數上含有 @Decrypt 注解的接口,處理解密問題。 beforeBodyRead:這個方法會在參數轉換成具體的對象之前執行,我們先從流中加載到數據,然后對數據進行解密,解密完成后再重新構造 HttpInputMessage 對象返回。

接下來,我們再來定義一個自動化配置類,如下:

@Configuration@ComponentScan('org.javaboy.encrypt.starter')public class EncryptAutoConfiguration {}

這個也沒啥好說的,比較簡單。

最后,resources 目錄下定義 META-INF,然后再定義 spring.factories 文件,內容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.encrypt.starter.autoconfig.EncryptAutoConfiguration

這樣當項目啟動時,就會自動加載該配置類。

至此,我們的 starter 就開發完成啦。

2.打包發布

我們可以將項目安裝到本地倉庫,也可以發布到線上供他人使用。

2.1 安裝到本地倉庫

安裝到本地倉庫比較簡單,直接 mvn install,或者在 IDEA 中,點擊右邊的 Maven,然后雙擊 install,如下:

Spring Boot 接口參數加密解密的實現方法

2.2 發布到線上

發不到線上我們可以使用 JitPack 來做。

首先我們在 GitHub 上創建一個倉庫,將我們的代碼上傳上去,這個過程應該不用我多說吧。

上傳成功后,點擊右邊的 Create a new release 按鈕,發布一個正式版,如下:

Spring Boot 接口參數加密解密的實現方法

Spring Boot 接口參數加密解密的實現方法

發布成功后,打開 jitpack,輸入倉庫的完整路徑,點擊 lookup 按鈕,查找到之后,再點擊 Get it 按鈕完成構建,如下:

Spring Boot 接口參數加密解密的實現方法

構建成功后,JitPack 上會給出項目引用方式:

Spring Boot 接口參數加密解密的實現方法

注意引用時將 tag 改成你具體的版本號。

至此,我們的工具就已經成功發布了!小伙伴們可以通過如下方式引用這個 starter:

<dependencies> <dependency> <groupId>com.github.lenve</groupId> <artifactId>encrypt-spring-boot-starter</artifactId> <version>0.0.3</version> </dependency></dependencies><repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories>3.應用

我們創建一個普通的 Spring Boot 項目,引入 web 依賴,再引入我們剛剛的 starter 依賴,如下:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.github.lenve</groupId> <artifactId>encrypt-spring-boot-starter</artifactId> <version>0.0.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies><repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories>

然后再創建一個實體類備用:

public class User { private Long id; private String username; //省略 getter/setter}

創建兩個測試接口:

@RestControllerpublic class HelloController { @GetMapping('/user') @Encrypt public RespBean getUser() { User user = new User(); user.setId((long) 99); user.setUsername('javaboy'); return RespBean.ok('ok', user); } @PostMapping('/user') public RespBean addUser(@RequestBody @Decrypt User user) { System.out.println('user = ' + user); return RespBean.ok('ok', user); }}

第一個接口使用了 @Encrypt 注解,所以會對該接口的數據進行加密(如果不使用該注解就不加密),第二個接口使用了 @Decrypt 所以會對上傳的參數進行解密,注意 @Decrypt 注解既可以放在方法上也可以放在參數上。

接下來啟動項目進行測試。

首先測試 get 請求接口:

Spring Boot 接口參數加密解密的實現方法

可以看到,返回的數據已經加密。

再來測試 post 請求:

Spring Boot 接口參數加密解密的實現方法

可以看到,參數中的加密數據已經被還原了。

如果用戶想要修改加密密鑰,可以在 application.properties 中添加如下配置:

spring.encrypt.key=1234567890123456

加密數據到了前端,前端也有一些 js 工具來處理加密數據,這個松哥后面有空再和大家說說 js 的加解密。

4.小結

好啦,今天這篇文章主要是想和大家聊聊 ResponseBodyAdvice 和 RequestBodyAdvice 的用法,一些加密思路,當然 ResponseBodyAdvice 和 RequestBodyAdvice 還有很多其他的使用場景,小伙伴們可以自行探索~本文使用了對稱加密中的 AES 算法,大家也可以嘗試改成非對稱加密。

本文案例獲取地址如下所示:

starter 源碼地址:

https://github.com/lenve/encrypt-spring-boot-starter

使用案例源碼地址:

https://github.com/lenve/javaboy-code-samples

到此這篇關于Spring Boot 接口參數加密解密的實現方法的文章就介紹到這了,更多相關Spring Boot 接口參數加密解密內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 日日想日日干 | 国产高清一区 | 日韩在线视频一区 | 青青久视频 | 国产精品视频一区二区三区, | 久久精品亚洲一区二区 | 欧美精品1区2区3区 免费亚洲婷婷 | 国产成人欧美一区二区三区的 | 亚洲精品中文字幕 | 日韩国产免费观看 | 中文字幕自拍偷拍 | 免费观看一级特黄欧美大片 | 亚洲a网 | 国产精品视频一二三区 | 一区二区三区在线 | 永久精品| 精品视频久久久 | 99在线看 | 羞羞在线视频 | 国产精品视频在线观看 | av免费看在线 | 天天干天天干天天干天天射 | 成人在线免费av | 国产精品影院在线观看 | 极品女神高潮呻吟av久久 | 五月天婷婷免费视频 | 亚洲精品一区二区三区麻豆 | 欧美日韩二区三区 | 久久久久久91 | 国产大学生援交视频在线观看 | 国产成人涩涩涩视频在线观看 | 最近免费中文字幕在线视频2 | 99精品免费 | 中文字幕一区二区三区四区不卡 | 看黄色.com | 免费毛片在线播放 | 国产免费久久 | 亚洲国产精品人人爽夜夜爽 | 超碰人人爱 | 国产精品99久久久久久动医院 | 精品护士一区二区三区 | 求av网站 | 久久99国产精品久久99果冻传媒 | 日韩在线免费 | 免费无遮挡www小视频 | 国产99久久精品 | 国产一级在线观看 | 国产偷录视频叫床高潮对白 | 亚洲一区不卡在线 | 人操人人 | 亚洲福利一区二区 | 中文字幕不卡在线88 | 成人在线不卡 | 国产性猛交xxxx免费看久久 | 国产精品成人一区二区三区夜夜夜 | 久久99国产精品 | 亚洲国产精品视频 | 欧洲视频一区二区三区 | www97影院 | 日本色网址 | 涩久久| 色婷婷一区二区三区 | 欧美成人中文字幕 | 色婷婷国产精品 | 看全黄大色黄大片老人做 | 国产亚洲精品久久久优势 | 国产女人高潮视频在线观看 | 日韩欧美在线播放 | 国产精品久久久久无码av | 免费一级黄色电影 | 日韩成人免费 | 男人的天堂在线视频 | 免费h视频| 久久久久亚洲精品国产 | 国产精品一区二区不卡 | 国产成人免费视频网站视频社区 | 91精品国产乱码久 | 日本精品一区 | 日日干日日操 | 国产精品黄网站在线观看 | 成人午夜精品一区二区三区 | 97国产精品| 久久国产精品久久久久久久久久 | 国产第一区在线观看 | 亚洲精品视频在线 | 亚洲精品视频导航 | 综合久久综合久久 | 在线观看中文字幕 | 国产精品99久久久久久久vr | 天天综合91 | 在线免费av观看 | 精品视频久久 | 一级欧美一级日韩 | 国产一级大片 | 一级免费毛片 | 国产高清在线观看 | 四虎中文字幕 | www.久久久 | 风间由美一区二区三区在线观看 | 亚洲精品乱码久久久久膏 | 国产欧美精品一区二区三区 | 黄网站色大毛片 | 99精品一区二区三区 | 精品日韩一区二区 | 成人福利在线观看 | 午夜免费视频 | 亚洲精品一区二区网址 | 色精品| 日韩视频在线观看视频 | 国产97碰免费视频 | 国家aaa的一级看片 h片在线看 | 欧美一区不卡 | 成人av免费在线 | 国产成人一区 | 精品中文字幕在线 | 欧美二区三区 | 精品一区二区三区免费 | 国产艳妇av视国产精选av一区 | 在线国产一区二区 | 狠狠综合久久av一区二区小说 | 国产二区免费 | 久久国产精品久久久久久 | 在线观看国产 | 午夜草逼 | 国产精品一区二区三区免费 | 亚洲天堂久 | 日韩精品一区二区三区中文在线 | 亚州成人 | 天堂一区二区三区 | 国产欧美精品一区二区 | 久久男人天堂 | 午夜视频91 | 成人av播放| 久久久大| 日韩成人免费视频 | 日本精品视频网站 | 在线视频一区二区 | 成人欧美一区二区三区黑人孕妇 | 亚洲每日更新 | 国产精品一区人伦免视频播放 | 亚洲伦理一区 | 国产精品久久久久久久久久久久久久 | 亚洲成人久久久 | 91偷拍精品一区二区三区 | 一区二区三区四区久久 | 一区在线免费 | 91tv亚洲精品香蕉国产一区 | 毛片91| 日韩欧美在线播放 | 精品久久久久久亚洲精品 | 国产日韩av在线 | 青青久久av北条麻妃海外网 | 日韩高清中文字幕 | heyzo 在线| 日韩在线成人 | 精精国产xxxx视频在线 | 中文字幕av亚洲精品一部二部 | 91色乱码一区二区三区 | hh99me在线观看| 99国产精品99久久久久久 | 成人三级在线 | 天天精品视频免费观看 | 99精品99| 一级视频网站 | 精品视频一区二区三区四区 | 成人午夜视频在线观看 | 国产精品一区电影 | 色综合天天综合网国产成人网 | 精品国产一区二区三区日日嗨 | 日韩色av| 日韩在线视频一区 | 国产美女久久 | 成人精品免费视频 | 黑人巨大精品欧美一区二区小视频 | 99久久久无码国产精品 | 免费成人高清在线视频 | 久久r精品| 国产精品片aa在线观看 | 蜜桃αv | 成人在线视频免费观看 | 自拍偷拍精品 | 毛片av片 | 91亚洲高清| 欧美日韩一区免费 | 国产毛片在线 | 欧美一区二区在线免费观看 | 久久久久久国产精品久久 | 日韩久草 | 成人在线国产 | 欧美日韩亚洲视频 | 亚州精品成人 | 欧美精品导航 | 午夜精品一区二区三区在线视频 | 99在线视频观看 | 成人在线视频免费观看 | 国产欧美一区二区精品忘忧草 | av 一区二区三区 | 欧美中文字幕一区二区 | 国产综合欧美 | 国产精品禁久久精品 | 欧美日韩国产在线观看 | 男人天堂视频网 | 亚洲午夜精品 | 精品国产一区二区三区成人影院 | 久久精品亚洲 | 亚洲h | 精品久久久久一区二区国产 | 91色乱码一区二区三区 | 99视频这里有精品 | 粉色午夜视频 | 国产激情一区二区三区成人免费 | 日韩精品免费视频 | 99热手机在线观看 | 免费网站看v片在线a | 天堂一区二区三区 | 精品96久久久久久中文字幕无 | 91久久精品一区二区三区 | 国产精品人人做人人爽人人添 | 99精品网站| 蜜桃视频一区二区三区 | 91麻豆精品国产91久久久资源速度 | 国产一区二区三区免费视频 | 日本一区二区精品视频 | 亚洲精品免费在线观看 | 99精品一区二区 | 国产欧美综合一区二区三区 | 草久在线视频 | 日韩av高清在线 | 中文字幕在线电影 | 91精品久久久久久久久久 | 羞羞视频在线观看入口 | 久久久精品高清 | 毛片视频播放 | 精品乱码一区二区 | julia一区二区三区中文字幕 | 免费看毛片的网站 | 在线成人av| 欧美精品1区2区3区 免费亚洲婷婷 | 福利91 | 一区二区在线视频 | 日本久久精品一区 | 亚洲a级 | 中文字幕av在线播放 | 天天久久 | 久久91视频| 国产精品久久久久久久久久妞妞 | 91精品国产91久久久久久最新 | 91精品国产综合久久久久久丝袜 | 91精品欧美久久久久久动漫 | 一色桃子av一区二区免费 | 午夜精品久久久久久久久久久久久 | 国产视频第一页 | 久久伊人草 | 北条麻妃一区二区在线 | 一区二区免费在线视频 | 一级毛片在线播放 | 亚洲黄页| 伊人网在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 在线观看你懂的网站 | 太平公主一级艳史播放高清 | 精品国产乱码久久久久久1区2区 | 亚洲无吗电影 | 国产精品久久久久久亚洲调教 | 日本特黄特色aaa大片免费 | 欧美精品亚洲 | 国产成人中文字幕 | 午夜男人网 | 色视频网站在线观看一=区 日韩一二三区 | 国产一区在线看 | 蜜桃免费一区二区三区 | 中文字幕亚洲一区 | 国产91精品一区二区绿帽 | 欧美一区二区三区精品 | 久久久99精品免费观看 | 欧美一区二区三区在线观看 | 黄色一级大片在线免费看产 | 久久网页| 天堂综合网 | 中文字幕一区二区三区四区 | 欧美在线a | 特a级片 | 99精品一区二区三区 | 久久精品中文字幕一区 | 日韩成人在线观看 | 亚洲成人久久久 | 久久久国产精品 | 久久99精品久久久 | 国产中文字幕在线观看 | 国产午夜一区二区三区 | 久久综合网址 | 精品2区 | 91精品国产91久久久久久黑人 | 国产在线网| 欧美日韩精品一区二区 | 国产精品国产精品国产专区不片 | 国产日韩欧美视频 | 一区二区三区在线观看视频 | 亚洲精品女人久久 | 免费看国产片在线观看 | 久草在线观看福利视频 | 国产日韩欧美 | 亚洲成人毛片 | 日韩欧美在线观看视频 | www国产一区 | 色必久久 | 韩国三级中文字幕hd久久精品 | 色视频网站在线观看 | 欧美日韩视频 | 狠狠干狠狠干 | 国产亚洲精品久久久久动 | 国内精品视频一区二区三区 | 一区二区三区回区在观看免费视频 | 中文字幕av一区二区 | 成人免费黄色毛片 | 亚洲综合国产 | 国产精品美女久久久久久久久久久 | 成人在线播放器 | 欧美日韩亚洲国产综合 | 国产午夜精品久久久久久久 | 男人的天堂久久 | 男女网站在线观看 | 国产精品久久久久国产a级 日韩在线二区 | 亚洲欧洲一区二区三区 | 久久免费在线观看 | 成人欧美一区二区三区视频xxx | 免费观看毛片 | 狠狠av | 欧美成人精品激情在线观看 | 成人精品在线视频 | 亚洲国产91 | 精品久久久久久久久久久久久久 | a一级片在线观看 | 久久99精品久久久水蜜桃 | 一区二区三区在线免费观看 | 久久蜜桃av一区二区天堂 | 一级黄色录像毛片 | 日韩99 | 亚洲h在线观看 | 亚洲精彩视频在线 | 精品久久一二三区 | 成人av在线网 | 亚洲精品自在在线观看 | 精品久久久久久久久久久久久久 | 亚洲国产精品久久久久秋霞不卡 | www日韩 | 曰批免费视频播放免费 | 91爱爱视频 | 成人亚洲| 久久精品色欧美aⅴ一区二区 | 欧美精品区| 久久亚洲国产精品 | www.蜜桃av | 久久久精品| 亚洲精品成人 | 日本私人网站在线观看 | 欧产日产国产精品一二 | 奇米色欧美一区二区三区 | 看一级毛片视频 | 99热在线精品免费 | 国产精品永久免费 | 成人免费在线视频 | 天天艹视频 | 日本jizz在线观看 | 99精品久久久国产一区二区三 | 久久99er6热线精品首页蜜臀 | 日韩午夜一级片 | 久久99国产精品久久99大师 | 午夜精品久久久久久久男人的天堂 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩成人高清 | 亚洲国产精品久久久久婷婷老年 | 日韩av电影网 | 天天影视色香欲 | 日本在线免费电影 | 日韩欧美综合 | 日韩精品免费在线观看 | 国产欧美日韩成人 | 国产一级毛片电影 | 一区二区在线视频 | 一区二区三区 在线 | 国产电影一区二区 | 久久青 | 天天干网 | 日韩在线不卡视频 | 99精品欧美一区二区三区综合在线 | 色花av| 香蕉av在线 | 欧美综合婷婷 | 欧美日韩电影一区二区 | 欧美国产高清 | 国产在线2 | 黄色小视频在线免费观看 | 国产福利片在线观看 | 国产欧美在线视频 | 亚洲八区 | 亚洲高清免费视频 | 91在线免费观看 | 日韩欧美在线视频 | 亚洲精品久久久久久动漫 | 久久99精品久久久久婷婷暖91 | 北条麻妃国产九九九精品小说 | 国产不卡在线 | 丝袜+亚洲+另类+欧美+变态 | 亚洲精品国产第一综合99久久 | 高清视频一区二区三区 | 国产在线观看av | 欧美一级二级片 | 亚洲 中文 欧美 日韩 在线观看 | 成人国产精品久久 | 亚洲成人基地 | 久久人体 | 亚洲日本乱码一区两区在线观看 | 亚洲第一性理论片 | 久久大| 欧美一级二级三级 | 综合久久网 | 福利网在线 | 国产一区二区三区视频 | 日日干夜夜操 | 日韩视频在线观看视频 | 中文字幕在线精品 | 午夜精品久久久久久久 | 在线你懂得 | 欧美一区免费 | 91精品国产高清久久久久久久久 | 成人在线观看免费 | 有码在线| 欧美福利视频 | 国产精品成人在线视频 | 久久久在线 | 欧美成年人视频 | av免费在线观看网站 | 久久久网 | 午夜国产一区 | 精品三级在线观看 | 国产免费久久 | 精品国产污网站污在线观看15 | 国产一级视频免费播放 | 毛片在线免费 | 亚洲视频免费看 | 色橹橹欧美在线观看视频高清 | 亚洲免费网 | 久久综合一区二区三区 | 99精品视频在线 | 在线观看欧美一区 | 日韩视频在线观看 | 69黄在线看片免费视频 | 久久久久国产精品午夜一区 | 亚洲一区二区三区久久久 | 成人av播放 | a√天堂资源在线 | 九九精品视频在线观看 | 人人种亚洲 | 欧美精品亚洲精品 | 亚洲天堂一区二区三区 | 精品在线一区二区 | 亚洲永久免费 | 狠狠操电影 | 亚洲无吗电影 | 日韩免费| 天天干天天操 | 亚洲人人 | 香港黄色录像片 | 国产裸体永久免费视频网站 | 色综合久久久 | 精品视频网 | 亚洲电影免费 | 亚洲成人一区二区 | 亚洲免费在线播放 | 日韩国伦理久久一区 | 精品国产黄色片 | 亚洲精品久久久久avwww潮水 | 91精品国产乱码久久久久久久久 | 日韩专区一区二区三区 | 亚洲性视屏| a级毛片免费高清视频 | 黄色三级视频 | 欧美视频在线播放 | 国产精品久久av | 精品欧美一区二区三区久久久小说 | 亚洲电影在线看 | 国内成人免费视频 | 国产免费一区二区 | 久久视频在线 | 97在线视频免费 | 成人高清视频免费观看 | 天天人人精品 | 亚洲aaa在线观看 | 91精品国产综合久久久亚洲 | 国产欧美一区二区精品性色 | 国产成人精品免费视频大全最热 | 91精品国产综合久久婷婷香蕉 | 国产日韩在线视频 | 亚州中文字幕 | 91视频国产网站 | 一区二区三区视频免费在线观看 | 色5月婷婷丁香六月 | 亚洲91| 午夜一区二区三区在线观看 | 成人久久久久爱 | 一区二区三区av | 日本黄色大片免费 | 蜜桃一区| 91精品在线观看入口 | 色欧美片视频在线观看 | av在线官网 | 中文字幕成人av | 污色视频在线观看 | 日韩视频精品在线观看 | 色综合天天综合网国产成人网 | 在线观看一区二区三区四区 | www.天天草| 欧美大片免费高清观看 | 亚洲精品电影在线观看 | 国产wwwcom| 五月婷婷综合网 | 91福利影院在线观看 | 精品综合久久 | 一区二区在线看 | 国产精品美女久久久久aⅴ国产馆 | 国外成人在线视频网站 | 亚洲视频免费在线 | 麻豆亚洲| 黄色一级电影免费观看 | 亚洲综合视频在线 | 日韩影音 | 国产精品女教师av久久 | 欧美日韩一区二区三区四区 | 欧美久久久久久久久久久久 | 一级片免费视频 | 欧美日韩视频在线 | 日韩激情视频一区 | 国精品产品区三区 | 亚洲成人三区 | www.蜜桃av| av免费看在线 | 欧美日韩视频 | 国产超碰人人爽人人做人人爱 | 亚洲免费视频一区二区 | 亚洲精品一区在线观看 | 日韩第一区 | 欧美国产一区二区 | 欧美一区二区三区免费 | 九色国产| 精品亚洲成a人片在线观看 国产高清在线 | 成人免费观看男女羞羞视频 | 国产精品99久久久久久久vr | 中文字幕一二三 | 欧美一区日韩一区 | 91视频国产区 | 久久午夜综合久久 | 毛片链接| av免费观看网站 | 午夜免费视频 | 成人片免费看 | 成人av高清在线观看 | 91综合网| 色九九 | 综合网视频| 欧美精品在线不卡 | 91视频一区二区三区 | 性人久久精品 | 日韩欧美国产一区二区 | 中文字幕av网 | 精品日韩一区二区三区 | 色综合天天| av在线播放网站 | 在线色网站 | 亚洲精品一区二区三区在线 | 在线观看亚洲视频 | 精品专区| 羞羞视频网站在线看 | 欧美精品一区二区三区四区在线 | 日本成人中文字幕 | 国产亚洲精品成人av久久影院 | 综合色成人 | 欧美激情 | 色吧一区 | 你懂的免费在线观看 | 日本丶国产丶欧美色综合 | 欧美精品一区久久 | 国产欧美精品一区二区三区四区 | 国产成人精品免费 | 国产成人亚洲综合 | 啪一啪| 免费观看羞羞视频网站 | www久久精品 | 久久久91| 国产九九精品 | ririsao久久精品一区 | 日韩在线免费观看网站 | 男女羞羞羞视频午夜视频 | 一级片免费在线 | 午夜色电影 | 精品国产一区二区三区在线观看 | 精品无码三级在线观看视频 | 荷兰欧美一级毛片 | 涩久久 | 欧美jizzhd精品欧美巨大免费 | 龙珠z中文版普通话 | 亚洲高清视频在线 | 成人做爰www免费看视频网站 | 自拍偷拍亚洲欧洲 | 久久久久国产一级毛片高清版小说 | 久久99精品久久久久子伦 | 青娱乐国产精品视频 | 在线视频亚洲 | 久久久久无码国产精品一区 | 另类国产ts人妖高潮系列视频 | 狠狠躁天天躁夜夜添人人 | 黄色av网站在线观看 | 亚洲tv久久爽久久爽 | 国产亚洲一区二区三区在线观看 | 中国国产一级毛片 |