精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久噜久噜久久综合| 国产成人aaa| 亚洲精品一区久久久久久| 无码无遮挡又大又爽又黄的视频| 免费在线黄色网址| 麻豆国产欧美日韩综合精品二区| 久热精品视频在线| 中国极品少妇videossexhd| 欧美freesex| 亚洲三级视频在线观看| 国产精品12| 亚洲男人天堂网址| 欧美激情aⅴ一区二区三区| 亚洲成色777777在线观看影院| 欧美s码亚洲码精品m码| 日本不卡三区| 91视频观看视频| 91久久久久久久一区二区| 五月婷婷激情网| 日韩激情免费| 亚洲精品狠狠操| 亚洲日本黄色片| 日韩伦理精品| 亚洲三级在线播放| 日本一区二区久久精品| 国产又粗又猛又黄| 久久综合九色| 成熟亚洲日本毛茸茸凸凹| 国产精品视频一区二区三区不卡| 91精品国产色综合| 粉嫩av性色av蜜臀av网站| 图片婷婷一区| 日韩精品一区二区三区在线播放 | 国产精品毛片一区二区在线看| 亚洲第一精品电影| 超级砰砰砰97免费观看最新一期 | 人妻少妇精品视频一区二区三区| 国产美女亚洲精品7777| 欧美天天综合网| 成人免费毛片网| 白白色在线观看| 一区二区三区四区在线免费观看 | 人妻av一区二区| 日韩影片在线观看| 欧美一区二区国产| 天天干天天av| 久久女人天堂| 欧美日本韩国一区二区三区视频| 日本精品久久久久中文字幕| 性欧美18xxxhd| 婷婷久久综合九色综合绿巨人| 成人在线免费高清视频| 91黄色在线| 亚洲乱码中文字幕| 男人的天堂视频在线| 免费高清在线观看| 亚洲日本一区二区| 午夜视频久久久| 国产视频二区在线观看| 久久久久久久久久久黄色| 欧美一区亚洲二区| 黄色av网站在线| 国产视频一区不卡| 午夜精品一区二区在线观看 | 久久99精品久久久久久琪琪| 91嫩草|国产丨精品入口| 午夜精品网站| 久久久久久久久国产精品| 日本熟妇乱子伦xxxx| 亚洲毛片网站| 欧美在线视频观看免费网站| 免费污污视频在线观看| 日韩av电影免费观看高清完整版| 国产精品入口免费视| 国产精品久久久久久在线| 国产精品77777竹菊影视小说| 久久综合九色综合97_久久久| 国产精品嫩草影院一区二区| 亚洲字幕av一区二区三区四区| 精品一区二区三区视频在线观看| 91传媒视频免费| 色婷婷激情五月| 久久精品日产第一区二区三区高清版 | 四虎精品永久在线| 日本麻豆一区二区三区视频| 91久久久在线| 色播色播色播色播色播在线| 中文在线一区二区| 91网站在线观看免费| 松下纱荣子在线观看| 色999日韩国产欧美一区二区| 性欧美1819| 超碰在线亚洲| 一区二区三区美女xx视频| 久久中文免费视频| 亚洲韩日在线| 国产欧美日韩丝袜精品一区| 亚洲第一视频在线| 中文字幕国产精品一区二区| 996这里只有精品| **在线精品| 日韩欧美123| 日韩一区二区a片免费观看| 91精品啪在线观看国产18| 2021国产精品视频| 国产成人精品免费看视频| 久久久青草青青国产亚洲免观| 一区二区三区在线观看www| 高清在线视频不卡| 3atv一区二区三区| 熟女俱乐部一区二区| 国产一区日韩一区| 成人国产精品久久久| 麻豆app在线观看| 亚洲一区二区三区四区在线免费观看 | 成人性生交大片免费看网站| 精品视频1区2区3区| 波多野结衣加勒比| 91麻豆精品国产91久久久平台| 91精品国产九九九久久久亚洲| 97av免费视频| 国产欧美日韩视频一区二区| 精品久久一二三| 免费一区二区三区在线视频| 深夜精品寂寞黄网站在线观看| 久久草视频在线| 国产aⅴ综合色| 国产精品波多野结衣| 先锋欧美三级| 国产偷亚洲偷欧美偷精品| 国产污视频在线看| 国产精品综合视频| 亚洲一二区在线| 国精产品一区二区三区有限公司| 亚洲黄色av网站| 日本三级视频在线| va亚洲va日韩不卡在线观看| 天天综合五月天| 日韩午夜电影免费看| 一区二区三区四区视频| 国产精品久久久久久人| 99国产精品一区| 97超碰人人澡| 精品久久97| 午夜精品久久久99热福利| 后入内射欧美99二区视频| 亚洲主播在线观看| 亚洲一二三四五| 亚洲视频综合| 极品尤物一区二区三区| free性m.freesex欧美| 精品对白一区国产伦| 成人免费看片98| 成人avav影音| 国产二区视频在线播放| 日韩欧美ww| 日本久久久久久久久久久| 免费在线高清av| 欧美综合视频在线观看| 国产欧美小视频| 精品一区二区三区免费观看 | 精品视频一区 二区 三区| 国产黄色录像视频| 久久国内精品自在自线400部| 亚洲制服中文| 老司机亚洲精品一区二区| 色综合色综合久久综合频道88| 亚洲黄色片视频| 精品成人久久av| 亚洲一区二区自偷自拍| 久久99蜜桃精品| 毛片在线视频观看| 免费看久久久| 国产精品视频免费在线| 麻豆影院在线| 亚洲国产毛片完整版| 99re这里只有精品在线| 国产精品理伦片| 亚洲av综合色区无码另类小说| 亚洲裸体俱乐部裸体舞表演av| 日本一区二区精品视频| 精品国产亚洲一区二区在线观看| 久久露脸国产精品| 国产毛片在线看| 欧美一区永久视频免费观看| 日本中文字幕在线免费观看| 久久精品这里都是精品| 樱花草www在线| 国产欧美精品久久| 在线看视频不卡| 精品成人自拍视频| 国产精品美乳一区二区免费| 天堂8中文在线| 亚洲欧美一区二区三区四区| 国产欧美一级片| 日韩欧美在线国产| 免费三级在线观看| 久久免费电影网| 伊人av在线播放| 青娱乐精品在线视频| 美女扒开大腿让男人桶| 成人精品影院| 精品九九九九| 久久69av| 国产精品欧美日韩一区二区| 国产蜜臀在线| 精品国产欧美成人夜夜嗨| 香蕉久久国产av一区二区| 欧美福利电影网| 99久久精品国产亚洲| 一区二区三区色| 永久免费观看片现看| 91在线观看地址| 日韩av成人网| 国产麻豆精品久久一二三| 国产精品天天av精麻传媒| 在线欧美不卡| av中文字幕av| 日韩中文字幕高清在线观看| 欧美日韩高清免费| 欧美一级二级三级视频| 97人人干人人| 国产精品视频一区视频二区| 国产精品老牛影院在线观看| a欧美人片人妖| 98视频在线噜噜噜国产| 免费在线国产视频| 精品少妇v888av| 国产日产一区二区三区| www.日本久久久久com.| 国产九九在线| 亚洲天堂男人天堂女人天堂| 五月天丁香视频| 亚洲国产91色在线| 超碰福利在线观看| 日韩一区二区三免费高清| 亚洲中文字幕在线观看| 欧美日韩国产成人在线91| 国产精品露脸视频| 欧美少妇一区二区| 一级久久久久久| 欧美性色aⅴ视频一区日韩精品| 91在线视频在线观看| 色综合天天狠狠| av资源免费观看| 欧美三级免费观看| 久久国产黄色片| 欧美性猛交xxxx黑人猛交| 九九热在线免费观看| 精品久久在线播放| 中文在线第一页| 色猫猫国产区一区二在线视频| 色屁屁影院www国产高清麻豆| 欧美视频在线免费| 欧美成人一区二区三区四区| 91国偷自产一区二区开放时间| 波多野结衣激情视频| 欧美午夜电影一区| 97成人在线观看| 欧美一区三区四区| 色香蕉在线视频| 亚洲久久久久久久久久久| 久热av在线| 日韩有码在线视频| caoporm免费视频在线| 欧美日韩爱爱视频| 人狥杂交一区欧美二区| 日韩免费观看高清| 台湾天天综合人成在线| 999精品视频一区二区三区| 国产精品chinese在线观看| 久热国产精品视频一区二区三区| 亚洲国产合集| 中文精品一区二区三区| 欧美va天堂在线| 国产中文字幕二区| 日韩一区精品字幕| 小早川怜子一区二区三区| 盗摄精品av一区二区三区| 久久精品老司机| 国产精品久久久久一区| 精品一区二区三区人妻| 一本到一区二区三区| 91 中文字幕| 精品国产sm最大网站免费看| 日韩在线无毛| 久久精品国产成人| 爱啪视频在线观看视频免费| 国产精品久久久久一区二区 | 久久国产精品久久精品国产| 精品国产一区二区三区| 特级西西444| 午夜亚洲性色视频| 91aaa精品| 久久久精品一品道一区| 精品无码久久久久成人漫画| 欧美午夜美女看片| 国产黄色片免费| 亚洲美女av在线| 51xtv成人影院| 国产精品第8页| 国产精品男女| 欧美 日韩 国产 在线观看| 国产欧美欧美| jjzz黄色片| 国产精品久久毛片a| 久草国产精品视频| 555夜色666亚洲国产免| 日韩a在线看| 欧美日韩aaaa| 亚洲网站免费| 色噜噜色狠狠狠狠狠综合色一| 在线精品一区| 成人做爰69片免费| 亚洲欧洲另类国产综合| 天堂网视频在线| 日韩精品中文字幕在线观看| av在线播放国产| 国产欧美日韩视频| 成人情趣视频网站| 欧美日韩二三区| 丁香六月综合激情| 国产suv一区二区三区| 欧美三级一区二区| 国产综合视频一区二区三区免费| 久久久久久久香蕉网| 国产视频一区二| 在线丝袜欧美日韩制服| 首页国产欧美日韩丝袜| 亚洲色图14p| 亚洲va中文字幕| 超碰在线观看av| 美日韩精品免费观看视频| 四虎影视精品永久在线观看| 亚洲高清123| 日韩电影在线观看网站| 国产色视频一区二区三区qq号| 亚洲大片一区二区三区| av一区二区三| 精品视频9999| 久久国产精品美女| 亚洲天堂第一区| 国产精品69毛片高清亚洲| 亚洲熟女www一区二区三区| 欧美另类高清zo欧美| 蜜桃av在线免费观看| 91久久久久久久| 欧美成熟视频| 欧美一级片在线免费观看| 亚洲黄色av一区| 亚洲AV无码乱码国产精品牛牛| 欧美另类在线播放| 99a精品视频在线观看| 日韩极品视频在线观看| 成人免费视频caoporn| 精品久久免费视频| 日韩精品视频在线免费观看| a级片在线免费观看| 精品欧美一区二区在线观看视频| 99国产精品久久久久久久成人热 | 国产视频手机在线观看| 欧美精品在线观看| 2020国产精品极品色在线观看| 国产综合中文字幕| 91麻豆高清视频| 中文字幕在线天堂| 精品久久国产精品| 日本在线一区二区三区| 免费看国产一级片| 久久先锋影音av鲁色资源| 国内av在线播放| 大量国产精品视频| 高清日韩中文字幕| 国产精品免费成人| 亚洲欧美在线aaa| 亚洲精品无amm毛片| 欧美一级在线亚洲天堂| 日韩在线观看一区 | 国产后入清纯学生妹| 久久久久成人网| 美女精品一区最新中文字幕一区二区三区 | 精品乱码一区| 日本sm残虐另类| 国产亚洲精品成人| 亚洲欧洲自拍偷拍| 成人在线分类| 91传媒久久久| 亚洲欧洲三级电影| 亚州男人的天堂| 国产欧美日韩专区发布| 亚洲激情自拍| 国产精品69久久久久孕妇欧美| 日韩欧美一区在线观看| 欧美成人a交片免费看| 熟女视频一区二区三区| 91在线视频网址| 999av视频| 日本精品久久久久影院| 这里只有精品在线| 性欧美13一14内谢|