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

Springboot 數據安全傳輸加密與解密

開發 前端
通過繼承RequestBodyAdviceAdapter實現對于請求的內容進行解密操作,實現ResponseBodyAdvice來對相應內容進行加密處理。

[[374394]]

 環境:springboot2.2.6.RELEASE、Vue+axios

通過繼承RequestBodyAdviceAdapter實現對于請求的內容進行解密操作,實現ResponseBodyAdvice來對相應內容進行加密處理。

定義加密解密的接口:

SecretProcess.java

  1. public interface SecretProcess { 
  2.      
  3.     /** 
  4.      *  <p>數據加密</p> 
  5.      *  <p>時間:2020年12月24日-下午12:22:13</p> 
  6.      * @author xg 
  7.      * @param data 待加密數據 
  8.      * @return String 加密結果 
  9.      */ 
  10.     String encrypt(String data) ; 
  11.      
  12.     /** 
  13.      *  <p>數據解密</p> 
  14.      *  <p>時間:2020年12月24日-下午12:23:20</p> 
  15.      * @author xg 
  16.      * @param data 待解密數據 
  17.      * @return String 解密后的數據 
  18.      */ 
  19.     String decrypt(String data) ; 
  20.      
  21.     /** 
  22.      *  <p>加密算法格式:算法[/模式/填充]</p> 
  23.      *  <p>時間:2020年12月24日-下午12:32:49</p> 
  24.      * @author xg 
  25.      * @return String 
  26.      */ 
  27.     String getAlgorithm() ; 
  28.      
  29.     public static class Hex { 
  30.          
  31.         private static final char[] HEX = { '0''1''2''3''4''5''6''7''8''9'
  32.                 'a''b''c''d''e''f' }; 
  33.          
  34.         public static byte[] decode(CharSequence s) { 
  35.             int nChars = s.length(); 
  36.             if (nChars % 2 != 0) { 
  37.                 throw new IllegalArgumentException("16進制數據錯誤"); 
  38.             } 
  39.             byte[] result = new byte[nChars / 2]; 
  40.             for (int i = 0; i < nChars; i += 2) { 
  41.                 int msb = Character.digit(s.charAt(i), 16); 
  42.                 int lsb = Character.digit(s.charAt(i + 1), 16); 
  43.                 if (msb < 0 || lsb < 0) { 
  44.                     throw new IllegalArgumentException( 
  45.                         "Detected a Non-hex character at " + (i + 1) + " or " + (i + 2) + " position"); 
  46.                 } 
  47.                 result[i / 2] = (byte) ((msb << 4) | lsb); 
  48.             } 
  49.             return result; 
  50.         } 
  51.          
  52.         public static String encode(byte[] buf) { 
  53.             StringBuilder sb = new StringBuilder() ; 
  54.             for (int i = 0, leng = buf.length; i < leng; i++) { 
  55.                 sb.append(HEX[(buf[i] & 0xF0) >>> 4]).append(HEX[buf[i] & 0x0F]) ; 
  56.             } 
  57.             return sb.toString() ; 
  58.         } 
  59.          
  60.     } 
  61.      

 該接口中定義了兩個方法分別是加密與解密的方法,還有Hex類 該類用來對數據處理16進制的轉換。

定義一個抽象類實現上面的接口,具體的加解密實現細節在該抽象類中

AbstractSecretProcess.java

  1. public abstract class AbstractSecretProcess implements SecretProcess { 
  2.      
  3.     @Resource 
  4.     private SecretProperties props ; 
  5.      
  6.     @Override 
  7.     public String decrypt(String data) { 
  8.         try { 
  9.             Cipher cipher = Cipher.getInstance(getAlgorithm()) ; 
  10.             cipher.init(Cipher.DECRYPT_MODE, keySpec()) ; 
  11.             byte[] decryptBytes = cipher.doFinal(Hex.decode(data)) ; 
  12.             return new String(decryptBytes) ; 
  13.         } catch (Exception e) { 
  14.             throw new RuntimeException(e) ; 
  15.         } 
  16.     } 
  17.      
  18.     @Override 
  19.     public String encrypt(String data) { 
  20.         try { 
  21.             Cipher cipher = Cipher.getInstance(getAlgorithm()) ; 
  22.             cipher.init(Cipher.ENCRYPT_MODE, keySpec()) ; 
  23.             return Hex.encode(cipher.doFinal(data.getBytes(Charset.forName("UTF-8")))) ; 
  24.         } catch (Exception e) { 
  25.             throw new RuntimeException(e) ; 
  26.         } 
  27.     } 
  28.      
  29.     /** 
  30.      *  <p>根據密鑰生成不同的密鑰材料</p> 
  31.      *  <p>目前支持:AES, DES</p> 
  32.      *  <p>時間:2020年12月25日-下午1:02:54</p> 
  33.      * @author xg 
  34.      * @param secretKey 密鑰 
  35.      * @param algorithm 算法 
  36.      * @return Key 
  37.      */ 
  38.     public Key getKeySpec(String algorithm) { 
  39.         if (algorithm == null || algorithm.trim().length() == 0) { 
  40.             return null ; 
  41.         } 
  42.         String secretKey = props.getKey() ; 
  43.         switch (algorithm.toUpperCase()) { 
  44.             case "AES"
  45.                 return new SecretKeySpec(secretKey.getBytes(), "AES") ; 
  46.             case "DES"
  47.                 Key key = null ; 
  48.                 try { 
  49.                     DESKeySpec desKeySpec = new DESKeySpec(secretKey.getBytes()) ; 
  50.                     SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES") ; 
  51.                     key = secretKeyFactory.generateSecret(desKeySpec); 
  52.                 } catch (Exception e) { 
  53.                     throw new RuntimeException(e) ; 
  54.                 } 
  55.                 return key ; 
  56.             default
  57.                 return null ; 
  58.         } 
  59.     } 
  60.      
  61.     /** 
  62.      *  <p>生成密鑰材料</p> 
  63.      *  <p>時間:2020年12月25日-上午11:35:03</p> 
  64.      * @author xg 
  65.      * @return Key 密鑰材料 
  66.      */ 
  67.     public abstract Key keySpec() ; 
  68.      

 該抽象類中提供了2中對稱加密的密鑰還原,分表是AES和DES算法。一個抽象方法,該抽象方法

keySpec該方法需要子類實現(具體使用的是哪種對稱加密算法)。

具體加密算法的實現類

AESAlgorithm.java

  1. public class AESAlgorithm extends AbstractSecretProcess { 
  2.  
  3.     @Override 
  4.     public String getAlgorithm() { 
  5.         return "AES/ECB/PKCS5Padding"
  6.     } 
  7.      
  8.     @Override 
  9.     public Key keySpec() { 
  10.         return this.getKeySpec("AES") ; 
  11.     } 
  12.  

 SecretProperties.java 屬性配置類

  1. @Configuration 
  2. public class SecretConfig { 
  3.      
  4.     @Bean 
  5.     @ConditionalOnMissingBean(SecretProcess.class) 
  6.     public SecretProcess secretProcess() { 
  7.         return new AESAlgorithm() ; 
  8.     } 
  9.      
  10.     @Component 
  11.     @ConfigurationProperties(prefix = "secret"
  12.     public static class SecretProperties { 
  13.          
  14.         private Boolean enabled ; 
  15.         private String key ; 
  16.  
  17.         public Boolean getEnabled() { 
  18.             return enabled; 
  19.         } 
  20.  
  21.         public void setEnabled(Boolean enabled) { 
  22.             this.enabled = enabled; 
  23.         } 
  24.  
  25.         public String getKey() { 
  26.             return key
  27.         } 
  28.  
  29.         public void setKey(String key) { 
  30.             this.key = key
  31.         } 
  32.          
  33.     } 
  34.      

 配置文件中如下配置:

  1. secret: 
  2.   key: aaaabbbbccccdddd #密鑰 
  3.   enabled: true #是否開啟加解密功能 

 在項目中可能不是所有的方法都要進行數據的加密解密出來,所以接下來定義一個注解,只有添加有該注解的Controller類或是具體接口方法才進行數據的加密解密,如下:

SIProtection.java

  1. @Target({ElementType.METHOD, ElementType.TYPE}) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. @Mapping 
  4. @Documented 
  5. public @interface SIProtection { 
  6.  

 對請求內容進行解密出來,通過RequestBodyAdvice

DecryptRequestBodyAdivce.java

  1. @ControllerAdvice 
  2. @ConditionalOnProperty(name = "secret.enabled", havingValue = "true"
  3. public class DecryptRequestBodyAdivce extends RequestBodyAdviceAdapter { 
  4.  
  5.     @Resource 
  6.     private SecretProcess secretProcess ; 
  7.      
  8.     @Override 
  9.     public boolean supports(MethodParameter methodParameter, Type targetType, 
  10.             Class<? extends HttpMessageConverter<?>> converterType) { 
  11.         return methodParameter.getMethod().isAnnotationPresent(SIProtection.class)  
  12.                 || methodParameter.getMethod().getDeclaringClass().isAnnotationPresent(SIProtection.class) ; 
  13.     } 
  14.  
  15.     @Override 
  16.     public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, 
  17.             Class<? extends HttpMessageConverter<?>> converterType) throws IOException { 
  18.         String body = secretProcess.decrypt(inToString(inputMessage.getBody())) ; 
  19.         return new HttpInputMessage() { 
  20.             @Override 
  21.             public HttpHeaders getHeaders() { 
  22.                 return inputMessage.getHeaders(); 
  23.             } 
  24.             @Override 
  25.             public InputStream getBody() throws IOException { 
  26.                 return new ByteArrayInputStream(body.getBytes()) ; 
  27.             } 
  28.         } ; 
  29.     } 
  30.      
  31.     private String inToString(InputStream is) { 
  32.         byte[] buf = new byte[10 * 1024] ; 
  33.         int leng = -1 ; 
  34.         StringBuilder sb = new StringBuilder() ; 
  35.         try { 
  36.             while ((leng = is.read(buf)) != -1) { 
  37.                 sb.append(new String(buf, 0, leng)) ; 
  38.             } 
  39.             return sb.toString() ; 
  40.         } catch (IOException e) { 
  41.             throw new RuntimeException(e) ; 
  42.         } 
  43.     } 
  44.  

 注意這里的:@ConditionalOnProperty(name = "secret.enabled", havingValue = "true")注解,只有開啟了加解密功能才會生效。注意這里的supports方法

對響應內容加密出來

EncryptResponseBodyAdivce.java

  1. @ControllerAdvice 
  2. @ConditionalOnProperty(name = "secret.enabled", havingValue = "true"
  3. public class EncryptResponseBodyAdivce implements ResponseBodyAdvice<Object>  { 
  4.  
  5.     @Resource 
  6.     private SecretProcess secretProcess ; 
  7.  
  8.     @Override 
  9.     public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { 
  10.         return returnType.getMethod().isAnnotationPresent(SIProtection.class)  
  11.                 || returnType.getMethod().getDeclaringClass().isAnnotationPresent(SIProtection.class) ; 
  12.     } 
  13.  
  14.     @Override 
  15.     public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, 
  16.             Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, 
  17.             ServerHttpResponse response) { 
  18.         if (body == null) { 
  19.             return body ; 
  20.         } 
  21.         try { 
  22.             String jsonStr = new ObjectMapper().writeValueAsString(body) ; 
  23.             return secretProcess.encrypt(jsonStr) ; 
  24.         } catch (Exception e) { 
  25.             throw new RuntimeException(e) ; 
  26.         } 
  27.     } 

 Controller應用

  1. @PostMapping("/save"
  2.     @SIProtection 
  3.     public R save(@RequestBody Users users) { 
  4.         return R.success(usersService.save(users)) ; 
  5.     } // 這對具體方法進行加解密 
  6.  
  7. @RestController 
  8. @RequestMapping("/users"
  9. @SIProtection  
  10. public class UsersController { // 對該Controller中的所有方法進行加解密處理 

 前端

引入第三方插件:crypto-js

工具方法加解密:

  1. /** 
  2.      * 加密方法 
  3.      * @param data 待加密數據 
  4.      * @returns {string|*} 
  5.      */ 
  6.     encrypt (data) { 
  7.       let key = CryptoJS.enc.Utf8.parse(Consts.Secret.key
  8.       if (typeof data === 'object') { 
  9.         data = JSON.stringify(data) 
  10.       } 
  11.       let plainText = CryptoJS.enc.Utf8.parse(data) 
  12.       let secretText = CryptoJS.AES.encrypt(plainText, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}).ciphertext.toString() 
  13.       return secretText 
  14.     }, 
  15.     /** 
  16.      * 解密數據 
  17.      * @param data 待解密數據 
  18.      */ 
  19.     decrypt (data) { 
  20.       let key = CryptoJS.enc.Utf8.parse(Consts.Secret.key
  21.       let secretText = CryptoJS.enc.Hex.parse(data) 
  22.       let encryptedBase64Str = CryptoJS.enc.Base64.stringify(secretText) 
  23.       let result = CryptoJS.AES.decrypt(encryptedBase64Str, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8) 
  24.       return JSON.parse(result) 
  25.     } 

 配置:

  1. let Consts = { 
  2.   Secret: { 
  3.     key'aaaabbbbccccdddd', // 必須16位(前后端要一致,密鑰) 
  4.     urls: ['/users/save'
  5.   } 
  6. export default Consts 

 這里的urls表示對那些請求進行攔截出來(加解密),這里也可以配置 "*" 表示對所有的請求出來。

axios請求前和響應后對數據進行加解密出來:

發送請求前:

  1. axios.interceptors.request.use((config) => { 
  2.       let uri = config.url 
  3.       if (uri.includes('?')) { 
  4.         uri = uri.substring(0, uri.indexOf('?')) 
  5.       } 
  6.       if (window.cfg.enableSecret === '1' && config.data && (Consts.Secret.urls.indexOf('*') > -1 || Consts.Secret.urls.indexOf(uri) > -1)) { 
  7.         let data = config.data 
  8.         let secretText = Utils.Secret.encrypt(data) 
  9.         config.data = secretText 
  10.       } 
  11.       return config 
  12.     }, (error) => { 
  13.       let errorMessage = '請求失敗' 
  14.       store.dispatch(types.G_SHOW_ALERT, {title: '請求失敗', content: errorMessage, showDetail: false, detailContent: String(error)}) 
  15.       return Promise.reject(error) 
  16.     }) 
  17. axios.interceptors.response.use((response) => { 
  18.       let uri = response.config.url 
  19.       if (uri.includes('?')) { 
  20.         uri = uri.substring(0, uri.indexOf('?')) 
  21.       } 
  22.       if (window.cfg.enableSecret === '1' && response.data && (Consts.Secret.urls.indexOf('*') > -1 || Consts.Secret.urls.indexOf(uri) > -1)) { 
  23.         let data = Utils.Secret.decrypt(response.data) 
  24.         if (data) { 
  25.           response.data = data 
  26.         } 
  27.       } 
  28.       return response 
  29.     }, (error) => { 
  30.       console.error(`test interceptors.response is in, ${error}`) 
  31.       return Promise.reject(error) 
  32.     }) 

 這里的 window.cfg.enableSecret 配置是我自己項目中有個配置文件配置是否開啟,這個大家可以根據自己的環境來實現。

測試:


這里可以看到前端發起的請求內容已經被加密了

響應內容:


完畢!!!

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-08-01 10:36:01

2024-06-13 08:41:41

2024-10-15 10:38:32

2021-01-29 08:19:50

HTTPS安全傳輸

2020-09-26 22:04:32

數據安全傳輸HTTPSHTTP 協議

2024-07-09 10:13:15

2024-05-08 08:16:11

2013-03-21 09:32:31

文件傳輸安全文件傳輸

2016-10-10 23:00:18

2009-11-26 13:12:01

2016-10-10 22:48:16

2023-03-06 08:49:02

加密和解密SpringBoot

2022-10-28 18:36:18

2025-03-26 08:43:17

2010-04-23 14:33:34

郵件服務器加密

2015-03-11 17:06:34

SDH網絡評估優化服務華為

2019-12-13 10:42:03

LinuxSCP命令

2017-08-14 15:14:33

2025-08-04 02:11:00

2010-01-12 12:26:58

數據備份云安全數據銷毀
點贊
收藏

51CTO技術棧公眾號

国产videos久久| 岛国av免费在线观看| 精品一区二区三区在线观看| 欧美人与性动交a欧美精品| 99re久久精品国产| 国产精品4hu.www| 夜夜操天天操亚洲| 清纯唯美一区二区三区| 国内精品国产成人国产三级| 久久久久国产一区二区| 成年人精品视频| 国产精品免费无码| www.久久东京| 9191久久久久久久久久久| aⅴ在线免费观看| 美女网站视频在线| 国产精品女同互慰在线看| 精品国产乱码一区二区三区四区| 国产传媒免费在线观看| 偷拍精品福利视频导航| 日韩欧美国产一区二区三区 | 中文精品一区二区| 日韩区在线观看| 欧美精品久久久久久久久25p| 日韩黄色影院| 激情六月婷婷久久| zzjj国产精品一区二区| 野外性满足hd| 精品自拍视频| 91久久一区二区| av免费观看大全| 伊人影院蕉久影院在线播放| 国产精品美女一区二区三区 | 免费无码国产精品| 亚洲看片免费| 久久免费视频在线观看| 欧美多人猛交狂配| 久久综合另类图片小说| 精品国产亚洲一区二区三区在线观看| 日韩欧美国产免费| 高潮在线视频| 黄色精品在线看| 丰满少妇大力进入| 精灵使的剑舞无删减版在线观看| www欧美成人18+| 久久精品二区| 丝袜视频国产在线播放| 2024国产精品| 欧美人与性禽动交精品| 久久99久久| 国产色爱av资源综合区| 亚洲精品国产精品国自产| 77777影视视频在线观看| 日本一区二区三区在线观看| 国产精品18毛片一区二区| 高潮毛片又色又爽免费 | 99在线精品视频免费观看软件| 99香蕉国产精品偷在线观看| 久久久视频在线| 91香蕉一区二区三区在线观看| 亚洲精品小区久久久久久| 精品亚洲一区二区三区在线播放| av在线网站免费观看| 日韩视频1区| 亚洲成人动漫在线播放| 蜜臀av一区二区三区有限公司| 视频一区国产| 亚洲国产欧美在线成人app| 黄色正能量网站| 成人黄色av| 久久香蕉国产线看观看网| 国精品无码一区二区三区| 好看不卡的中文字幕| 欧美亚洲免费电影| 亚洲精品午夜久久久久久久| 亚洲高清资源在线观看| 久久久久久久久久久亚洲| 天天综合网入口| 麻豆精品久久精品色综合| 国产成人啪精品视频免费网| 免费观看一区二区三区毛片 | 欧美精品videossex性护士| 毛片视频免费播放| 影音先锋成人在线电影| 98精品国产自产在线观看| 免费又黄又爽又猛大片午夜| 国产专区欧美精品| 91免费看片网站| 日本激情一区二区| 99riav久久精品riav| 天堂资源在线亚洲视频| 97人人在线| 国产精品免费视频一区| 午夜精品一区二区在线观看 | 黑人巨茎大战欧美白妇| 欧美裸体视频| 欧美一区二区三区四区久久| 午夜影院免费观看视频| 视频小说一区二区| 久久国产精品影视| 波多野结衣影片| 高清在线观看日韩| 天堂资源在线亚洲资源| 国产丝袜在线播放| 欧美日韩亚洲不卡| 黄色录像a级片| 91成人网在线观看| 国产精品久久久久77777| 亚洲性猛交富婆| 成人三级伦理片| 亚洲女人毛片| 日韩大片欧美大片| 亚洲精品720p| 欧美日韩一级大片| 亚洲国产精品第一区二区| 国产精品高清免费在线观看| 风流老熟女一区二区三区| 91色porny| 欧美高清中文字幕| 三妻四妾完整版在线观看电视剧| 日韩欧美一区二区在线| 欧美三级理论片| 亚洲高清极品| 97视频人免费观看| 高h震动喷水双性1v1| 亚洲精品视频在线| 亚洲娇小娇小娇小| 欧美精品一区二区三区精品| 日本午夜精品理论片a级appf发布| 欧美性受xxx黑人xyx性爽| 99精品久久久久久| 人妻夜夜添夜夜无码av| 一区二区三区在线免费看| 久久手机免费视频| 97超碰资源站| 亚洲欧美日韩一区二区三区在线观看| 日韩一级片免费视频| 日本超碰一区二区| 欧美第一页在线| а√中文在线资源库| 亚洲人精品午夜| 美女被艹视频网站| 中文字幕一区二区三三| 青草青草久热精品视频在线网站 | 精品久久久久av影院| 97成人资源站| 国产一区二区三区美女| 欧美午夜精品久久久久免费视| 老司机在线视频二区| 欧美人妖巨大在线| 永久免费看片直接| 国产在线观看一区二区| 在线视频一二三区| 我要色综合中文字幕| 欧美激情视频免费观看| 亚洲国产精品久久久久久久| 亚洲国产日韩一区二区| 亚洲 欧美 日韩在线| 亚洲在线黄色| 午夜一区二区三区| av在线亚洲一区| 美女福利视频一区| 天天操天天操天天操| 色哟哟亚洲精品| 女人黄色一级片| 国产一区二区三区四| 水蜜桃亚洲一二三四在线| 日韩成人在线电影| 欧美激情国内偷拍| 四虎国产精品永远| 欧美猛男男办公室激情| 久草视频免费在线| 久久一夜天堂av一区二区三区| 男人天堂手机在线视频| 亚洲伊人春色| 91视频免费在线| 国产粉嫩在线观看| 综合网中文字幕| 国产999久久久| 欧美日韩国产精品一区二区不卡中文| 久久久无码人妻精品无码| 国产日本精品| 激情伦成人综合小说| 成人在线高清免费| 亚洲日本成人网| 国产巨乳在线观看| 精品人伦一区二区三区蜜桃免费| 免费看黄色片的网站| 日韩精品国产欧美| 久草视频这里只有精品| 成人午夜大片| 国产欧美日韩免费看aⅴ视频| 91露出在线| 亚洲韩国欧洲国产日产av| 一卡二卡三卡在线| 欧美日韩一区二区在线 | 亚洲精品久久久久久久蜜桃| 久久久久国产精品麻豆| 久久久久久综合网| 老色鬼久久亚洲一区二区| 日韩精品第1页| 国产欧美日韩精品一区二区免费| 国产成人精品综合| 在线视频91p| 日韩经典中文字幕| 99精品人妻无码专区在线视频区| 亚洲精选视频在线| 国产精品高清无码在线观看| 国产不卡一区视频| 免费观看日韩毛片| 国产精品日韩精品中文字幕| 国产不卡一区二区在线观看 | 国产精品久久999| av资源网在线播放| 日韩激情第一页| www.色日本| 制服视频三区第一页精品| 久久久久亚洲视频| 精品国产乱码久久久久久天美| 伊人网伊人影院| 99免费精品在线观看| 国产男女无遮挡猛进猛出| 美女尤物国产一区| 免费大片在线观看| 香蕉久久国产| 久久免费视频2| 久久理论电影| 亚洲草草视频| 成人一级毛片| 亚洲精品乱码久久久久久蜜桃91| 8848成人影院| 亚洲xxx视频| 精品一区二区三区中文字幕在线 | 亚洲精品久久在线| 国产香蕉在线观看| 欧美xingq一区二区| 国产xxxx孕妇| 日韩你懂的电影在线观看| 国产色在线视频| 91麻豆精品国产综合久久久久久| 好吊妞视频一区二区三区| 亚洲成人免费看| 日韩黄色精品视频| 日韩美女久久久| 国产麻豆视频在线观看| 亚洲美女免费视频| 欧美人妻精品一区二区三区| 亚洲中国最大av网站| 中文字幕第28页| 国产精品视频观看| 亚洲国产精品成人综合久久久| 久久国产三级精品| www.污网站| 国产1区2区3区精品美女| 精品影片一区二区入口| 99久久久久免费精品国产 | 国产一级黄色av| 亚洲一区二区三区四区五区黄 | 色噜噜狠狠一区二区| 蜜臀91精品一区二区三区 | 欧美草草影院在线视频| 亚洲第一色网站| 精品无人区太爽高潮在线播放| 国产不卡精品视频| 精品成人免费观看| 国产三级自拍视频| 亚洲高清在线观看| 国产精品影院在线| 欧美成人中文字幕| 美女视频在线免费| 国产玖玖精品视频| 一区二区三区在线免费看| 久久久久成人精品免费播放动漫| 深夜激情久久| 欧美大陆一区二区| 四虎国产精品免费观看| 日韩hmxxxx| 综合国产在线| 日韩avxxx| 久久精品国产网站| 免费的av网站| 国产精品剧情在线亚洲| 国产真实夫妇交换视频| 亚洲一区二区三区不卡国产欧美| 外国一级黄色片| 欧美日韩另类在线| 国产精品一区二区三区四| 欧美日韩亚洲综合一区| 风流少妇一区二区三区91| 亚洲最新中文字幕| 国产精品偷拍| 57pao国产精品一区| 国产999精品在线观看| 92看片淫黄大片看国产片| 日韩一级电影| 麻豆md0077饥渴少妇| 麻豆91精品| 蜜桃视频无码区在线观看| 中文字幕乱码日本亚洲一区二区| 91大神福利视频| 欧美日韩在线看| 精品国产区一区二| 中文字幕亚洲一区| 国产自产自拍视频在线观看| 91在线观看免费高清| 狠狠做深爱婷婷综合一区| 丁香花在线影院观看在线播放| 亚洲在线观看| 午夜影院福利社| 亚洲天堂中文字幕| 国产日韩久久久| 日韩福利在线播放| 色屁屁www国产馆在线观看| 91精品国产综合久久久久久蜜臀 | 黄色的视频在线观看| 国产精品主播视频| 欧洲杯半决赛直播| 看av免费毛片手机播放| 成人美女视频在线观看18| 国产草草浮力影院| 国产欧美日韩视频一区二区| 久久国产波多野结衣| 欧美少妇一区二区| 美女毛片在线看| 日韩午夜在线视频| 久久久成人av毛片免费观看| 欧美极品一区| 亚洲欧美高清| www.色多多| 懂色aⅴ精品一区二区三区蜜月| 亚洲天堂网在线视频| 国产午夜精品视频免费不卡69堂| 91cn在线观看| 91麻豆国产语对白在线观看| 婷婷伊人综合| 污污的视频免费观看| 国产精品乱码人人做人人爱| 国产无遮挡又黄又爽在线观看| 欧美性色综合网| 国产在线一在线二| 国产精欧美一区二区三区| 国产精品日韩精品中文字幕| 男女无套免费视频网站动漫| 国产欧美日韩综合精品一区二区| 九九视频免费在线观看| 日韩视频在线观看一区二区| 国产尤物视频在线| 国产精品久久久久久久久免费看 | 日韩一区二区三区高清| 国产一区观看| 亚洲一区二区在线免费| 亚洲成a人片综合在线| 欧美一级特黄aaaaaa| 91成人国产在线观看| 亚洲精品蜜桃乱晃| 777视频在线| 亚洲私人影院在线观看| 99久久亚洲精品日本无码 | 你懂的在线观看| 日本一区二区三区四区视频| 好吊妞国产欧美日韩免费观看网站 | 中文字幕av一区二区三区免费看| 日干夜干天天干| 亚洲人成网站色ww在线| 成人精品动漫| 日韩av一区二区三区在线观看| 国产精品普通话对白| 免费观看a级片| 91精品国产黑色紧身裤美女| 草草影院在线观看| 91久久精品视频| 亚洲人成在线影院| 天天干天天操天天拍| 日韩欧美一二三| 26uuu亚洲电影| 91免费网站视频| 99视频精品在线| 一本久道久久综合无码中文| 国产一区二区av| 欧一区二区三区| 不要播放器的av网站| 亚洲精品视频免费看| 黄色美女网站在线观看| 亚洲综合第一页| 首页国产欧美久久| 欧美黄色一级网站| 亚洲少妇激情视频| 一区二区三区视频播放| 丰满少妇在线观看| 亚洲国产日韩综合久久精品| wwwxxx在线观看| 国产一区二区黄色| 在线综合亚洲| 人妻少妇一区二区| 欧美一级一区二区| 欧美亚洲大片| 久久99久久久久久| 国产精品久久久久婷婷| 五月婷婷免费视频| 91探花福利精品国产自产在线|