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

警惕,Mybatis的Size()方法竟然有坑!

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
MyBatis 是一個(gè)開(kāi)源的輕量級(jí)的半自動(dòng)化的 ORM 框架,用于面向?qū)ο蠛完P(guān)系型數(shù)據(jù)庫(kù)的映射,其中 xml 文件,和sql語(yǔ)句結(jié)合,最大的特點(diǎn),應(yīng)用程序sql解耦。

[[350041]]

本文轉(zhuǎn)載自微信公眾號(hào)「小明菜市場(chǎng)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系小明菜市場(chǎng)公眾號(hào)。

Hi ! 我是小小,今天我們又見(jiàn)面了,今日的主要內(nèi)容是MyBatis的size方法使用的主要的注意事項(xiàng)。

前言

MyBatis 是一個(gè)開(kāi)源的輕量級(jí)的半自動(dòng)化的 ORM 框架,用于面向?qū)ο蠛完P(guān)系型數(shù)據(jù)庫(kù)的映射,其中 xml 文件,和sql語(yǔ)句結(jié)合,最大的特點(diǎn),應(yīng)用程序sql解耦。OGNL表達(dá)式,是MyBatis中的廣泛應(yīng)用,是一種EL語(yǔ)言,用于設(shè)置和獲取 Java 對(duì)象的屬性,并且可以對(duì)列表進(jìn)行投影和執(zhí)行l(wèi)ambda表達(dá)式,ognl提供了簡(jiǎn)單,便于執(zhí)行的ognl表達(dá)式。一個(gè)線上服務(wù),經(jīng)常會(huì)出現(xiàn)一個(gè)異常,構(gòu)造各種OGNL表達(dá)式為空的情況都會(huì)重現(xiàn)該異常,具體的堆棧信息如下:

  1. ### Error querying database.  Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'list != null and list.size() > 0'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$SingletonList with modifiers "public"
  2. ### Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'list != null and list.size() > 0'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$SingletonList with modifiers "public"
  3.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107) 
  4.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98) 
  5.     at cn.com.shaobingmm.MybatisBugTest$2.run(MybatisBugTest.java:88) 
  6.     at java.lang.Thread.run(Thread.java:745) 
  7. Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'list != null and list.size() > 0'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$SingletonList with modifiers "public"
  8.     at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java 
  9.     at:47) 
  10.     at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:29) 
  11.     at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:30) 
  12.     at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:29) 
  13.     at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:51) 
  14.     at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:29) 
  15.     at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:37) 
  16.     at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:275) 
  17.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:79) 
  18.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) 
  19.     ... 3 more 
  20. Caused by: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$SingletonList with modifiers "public"
  21.     at org.apache.ibatis.ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:837) 
  22.     at org.apache.ibatis.ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:61) 
  23.     at org.apache.ibatis.ognl.OgnlRuntime.callMethod(OgnlRuntime.java:860) 
  24.     at org.apache.ibatis.ognl.ASTMethod.getValueBody(ASTMethod.java:73) 
  25.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) 
  26.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210) 
  27.     at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:109) 
  28.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) 
  29.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210) 
  30.     at org.apache.ibatis.ognl.ASTGreater.getValueBody(ASTGreater.java:49) 
  31.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) 
  32.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210) 
  33.     at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:56) 
  34.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) 
  35.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210) 
  36.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:333) 
  37.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:413) 
  38.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:395) 
  39.     at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:45) 
  40.     ... 12 more 

List的size方法明明有public,還不可訪問(wèn),該異常在測(cè)試環(huán)境未重現(xiàn),但是在接口的完整調(diào)用鏈路中出錯(cuò)的次數(shù)占總的調(diào)用次數(shù)的0.01%,這是概率性事件。

模擬測(cè)試

編寫(xiě)模擬多線程并發(fā)讀取公司列表的測(cè)試代碼

  1. <mapper namespace="CompanyMapper"
  2.     <select id="getCompanysByIds"resultType="cn.com.shaobingmm.Company"
  3.         select * 
  4.         from company 
  5.         <where
  6.             <if test="list != null and list.size() > 0"
  7.                 and id in 
  8.        <foreach collection="list" item="id" open="(" separator="," close=")">#{id} 
  9. </foreach> 
  10.             </if> 
  11.         </where
  12.     </select
  13. </mapper> 

多線程下進(jìn)行壓力測(cè)試

  1. String resource = "mybatis-config.xml"
  2.         InputStream in = null
  3.         try { 
  4.             in = Resources.getResourceAsStream(resource); 
  5.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); 
  6.             final List<Long> ids = Collections.singletonList(1L); 
  7.             final SqlSession session = sqlSessionFactory.openSession(); 
  8.             final CountDownLatch mCountDownLatch = new CountDownLatch(1); 
  9.             for (int i = 0; i < 50; i++) { 
  10.                 Thread thread = new Thread(new Runnable() { 
  11.                     public void run() { 
  12.                         try { 
  13.                             mCountDownLatch.await(); 
  14.                         } catch (InterruptedException e) { 
  15.                             e.printStackTrace(); 
  16.                         } 
  17.                         for (int k = 0; k < 100; k++) { 
  18.                             session.selectList("CompanyMapper.getCompanysByIds", ids); 
  19.                         } 
  20.                     } 
  21.                 }); 
  22.                 thread.start(); 
  23.             } 
  24.             mCountDownLatch.countDown(); 
  25.             synchronized (MybatisBugTest.class) { 
  26.                 try { 
  27.                     MybatisBugTest.class.wait(); 
  28.                 } catch (InterruptedException e) { 
  29.                     e.printStackTrace(); 
  30.                 } 
  31.             } 
  32.  
  33.         } catch (IOException e) { 
  34.             e.printStackTrace(); 
  35.         } catch (Throwable e) { 
  36.             e.printStackTrace(); 
  37.         } finally { 
  38.             if (in != null
  39.                 try { 
  40.                     in.close(); 
  41.                 } catch (IOException e) { 
  42.                     e.printStackTrace(); 
  43.                 } 
  44.         } 

上述代碼在并發(fā)的時(shí)候會(huì)出現(xiàn)異常。

  1. Caused by: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.Collections$SingletonList with modifiers "public"
  2.     at org.apache.ibatis.ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:837) 

異常信息表明ognlRuntime類(lèi)不能訪問(wèn)

查看源碼,破案

java.util.Collections的私有成員SingletonList。查看源代碼,可以知道鎖定在invokeMethod方法上。

  1. public static Object callAppropriateMethod(OgnlContext context, Object source, Object target, String methodName, String propertyName, List methods, Object[] args) throws MethodFailedException { 
  2.         Object reason = null
  3.         Object[] actualArgs = objectArrayPool.create(args.length); 
  4.  
  5.         try { 
  6.             Method e = getAppropriateMethod(context, source, target, methodName, propertyName, methods, args, actualArgs); 
  7.             if(e == null || !isMethodAccessible(context, source, e, propertyName)) { 
  8.                 StringBuffer buffer = new StringBuffer(); 
  9.                 if(args != null) { 
  10.                     int i = 0; 
  11.  
  12.                     for(int ilast = args.length - 1; i <= ilast; ++i) { 
  13.                         Object arg = args[i]; 
  14.                         buffer.append(arg == null?NULL_STRING:arg.getClass().getName()); 
  15.                         if(i < ilast) { 
  16.                             buffer.append(", "); 
  17.                         } 
  18.                     } 
  19.                 } 
  20.  
  21.                 throw new NoSuchMethodException(methodName + "(" + buffer + ")"); 
  22.             } 
  23.  
  24.             Object var14 = invokeMethod(target, e, actualArgs); 
  25.             return var14; 
  26.         } catch (NoSuchMethodException var21) { 
  27.             reason = var21; 
  28.         } catch (IllegalAccessException var22) { 
  29.             reason = var22; 
  30.         } catch (InvocationTargetException var23) { 
  31.             reason = var23.getTargetException(); 
  32.         } finally { 
  33.             objectArrayPool.recycle(actualArgs); 
  34.         } 
  35.  
  36.         throw new MethodFailedException(source, methodName, (Throwable)reason); 
  37.     } 

其方法代碼

  1. public static Object invokeMethod(Object target, Method method, Object[] argsArray) throws InvocationTargetException, IllegalAccessException { 
  2.         boolean wasAccessible = true
  3.         if(securityManager != null) { 
  4.             try { 
  5.                 securityManager.checkPermission(getPermission(method)); 
  6.             } catch (SecurityException var6) { 
  7.                 throw new IllegalAccessException("Method [" + method + "] cannot be accessed."); 
  8.             } 
  9.         } 
  10.  
  11.         if((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) && !(wasAccessible = method.isAccessible())) { 
  12.             method.setAccessible(true); (1) 
  13.         } 
  14.  
  15.         Object result = method.invoke(target, argsArray); (3) 
  16.         if(!wasAccessible) { 
  17.             method.setAccessible(false); (2) 
  18.         } 
  19.  
  20.         return result; 
  21.     } 

問(wèn)題出現(xiàn)在meta是一個(gè)共享變量,即

  1. public int java.util.Collections$SingletonList.size() 

當(dāng),第一個(gè)線程t1到第一行代碼允許method方法可以調(diào)用,第二個(gè)線程t2,執(zhí)行到2把方法method設(shè)置為不可訪問(wèn),接著t1又執(zhí)行,此時(shí)行列3會(huì)發(fā)生異常。

升級(jí)版本

lgnl2.7,已經(jīng)修復(fù)了這個(gè)問(wèn)題,所以修復(fù)后的代碼如下

  1. public static Object invokeMethod(Object target, Method method, Object[] argsArray) throws InvocationTargetException, IllegalAccessException { 
  2.         boolean syncInvoke = false
  3.         boolean checkPermission = false
  4.         int mHash = method.hashCode(); 
  5.         synchronized(method) { 
  6.             if(_methodAccessCache.get(Integer.valueOf(mHash)) == null || _methodAccessCache.get(Integer.valueOf(mHash)) == Boolean.TRUE) { 
  7.                 syncInvoke = true
  8.             } 
  9.  
  10.             if(_securityManager != null && _methodPermCache.get(Integer.valueOf(mHash)) == null || _methodPermCache.get(Integer.valueOf(mHash)) == Boolean.FALSE) { 
  11.                 checkPermission = true
  12.             } 
  13.         } 
  14.  
  15.         boolean wasAccessible = true
  16.         Object result; 
  17.         if(syncInvoke) { 
  18.             synchronized(method) { 
  19.                 if(checkPermission) { 
  20.                     try { 
  21.                         _securityManager.checkPermission(getPermission(method)); 
  22.                         _methodPermCache.put(Integer.valueOf(mHash), Boolean.TRUE); 
  23.                     } catch (SecurityException var12) { 
  24.                         _methodPermCache.put(Integer.valueOf(mHash), Boolean.FALSE); 
  25.                         throw new IllegalAccessException("Method [" + method + "] cannot be accessed."); 
  26.                     } 
  27.                 } 
  28.  
  29.                 if(Modifier.isPublic(method.getModifiers()) && Modifier.isPublic(method.getDeclaringClass().getModifiers())) { 
  30.                     _methodAccessCache.put(Integer.valueOf(mHash), Boolean.FALSE); 
  31.                 } else if(!(wasAccessible = method.isAccessible())) { 
  32.                     method.setAccessible(true); 
  33.                     _methodAccessCache.put(Integer.valueOf(mHash), Boolean.TRUE); 
  34.                 } else { 
  35.                     _methodAccessCache.put(Integer.valueOf(mHash), Boolean.FALSE); 
  36.                 } 
  37.  
  38.                 result = method.invoke(target, argsArray); 
  39.                 if(!wasAccessible) { 
  40.                     method.setAccessible(false); 
  41.                 } 
  42.             } 
  43.         } else { 
  44.             if(checkPermission) { 
  45.                 try { 
  46.                     _securityManager.checkPermission(getPermission(method)); 
  47.                     _methodPermCache.put(Integer.valueOf(mHash), Boolean.TRUE); 
  48.                 } catch (SecurityException var11) { 
  49.                     _methodPermCache.put(Integer.valueOf(mHash), Boolean.FALSE); 
  50.                     throw new IllegalAccessException("Method [" + method + "] cannot be accessed."); 
  51.                 } 
  52.             } 
  53.  
  54.             result = method.invoke(target, argsArray); 
  55.         } 
  56.  
  57.         return result; 
  58.     } 

關(guān)于作者

我是小小,一個(gè)生于二線,活在一線城市的程序猿,我是小小,我們下期再見(jiàn)。

 

責(zé)任編輯:武曉燕 來(lái)源: 小明菜市場(chǎng)
相關(guān)推薦

2019-09-18 15:20:16

MyBatisSQL數(shù)據(jù)庫(kù)

2020-07-07 07:37:36

Integer源碼Java

2022-09-04 12:43:03

算法裁員Meta

2021-07-05 18:05:40

SpringBean方法

2018-09-11 08:05:44

千兆路由器廠商

2019-06-14 08:48:46

Tomcat日志SpringBoot

2022-02-14 12:04:43

前綴SpringJpa

2015-07-20 15:26:56

WiFi感知

2020-11-27 09:16:21

BlockingQue

2021-12-08 08:30:55

Java AQS機(jī)制 Java 基礎(chǔ)

2016-06-07 09:23:05

瀏覽器技巧快捷鍵

2025-02-06 07:45:44

2021-05-07 05:34:25

Windows10操作系統(tǒng)微軟

2017-11-14 06:53:41

云計(jì)算云安全IT

2017-10-31 12:53:38

云計(jì)算虛擬化上云

2021-02-03 20:19:08

Istio流量網(wǎng)格

2020-11-02 08:35:59

內(nèi)存數(shù)據(jù)庫(kù)Redis

2017-03-07 17:45:42

Windows磁盤(pán)碎片整理

2021-06-10 09:00:33

單例模式數(shù)據(jù)庫(kù)

2018-06-15 14:28:36

華為云
點(diǎn)贊
收藏

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

日本少妇xxx| 欧美激情www| 九九热视频精品| 日韩大胆成人| 一本久久精品一区二区| 艳母动漫在线免费观看| 成人久久精品人妻一区二区三区| 亚洲另类视频| 久久精品久久久久| 久久久久亚洲av无码专区桃色| 久久er热在这里只有精品66| 亚洲6080在线| 久久免费看毛片| 青青草视频免费在线观看| 久久99精品网久久| 欧美在线视频免费播放| 四虎永久免费在线| 欧美精选视频在线观看| 精品久久久久久久久久久久包黑料| 日本一极黄色片| 黄色免费在线观看| 久久久久久黄色| 国产成人免费观看| 国产美女自慰在线观看| 日本视频免费一区| 日韩美女视频在线观看| 久久精品国产亚洲av高清色欲| 日韩欧美不卡| 国产一区二区三区在线观看视频 | 性色av蜜臀av色欲av| 最新日韩三级| 精品福利一区二区| 日本黄大片在线观看| 男人天堂久久久| 久久久久久久久久久黄色| 精品午夜一区二区| 欧美一级特黄aaaaaa大片在线观看| 久久99日本精品| 国产精品自产拍在线观看| 亚洲成人第一网站| 久久黄色影院| 欧美在线亚洲在线| 久草国产精品视频| 国产日韩欧美一区在线 | 亚洲在线观看一区| 91在线看片| 中文字幕精品一区| 亚洲视频欧美在线| www日韩tube| 欧美高清在线一区| 在线观看日本一区| 快射视频在线观看| 综合电影一区二区三区 | 成人在线播放免费观看| 亚洲同性同志一二三专区| 伊人情人网综合| 看女生喷水的网站在线观看| 亚洲美女精品一区| 青青草视频国产| 污视频网站免费在线观看| 亚洲最新在线观看| 黄色一级片在线看| 制服丝袜专区在线| 欧美性生活影院| 天天干天天操天天玩| 国产精品一区二区三区www| 日韩三级视频在线看| 中文字幕人妻一区| 无码少妇一区二区三区| 一本色道久久88综合日韩精品| 91狠狠综合久久久久久| 久久久久久久久久久久久久| 欧美区二区三区| 成人毛片18女人毛片| 销魂美女一区二区三区视频在线| 国产精品99久久久久久久久久久久 | 亚洲在线一区二区三区| 成人性免费视频| 午夜精品久久久久久久久久蜜桃| 欧美日韩一区二区三区四区五区| 欧美精品色视频| 欧美日韩一区二区三区在线电影| 亚洲无av在线中文字幕| 神马久久精品综合| 一区二区激情| 国产精品偷伦一区二区| 亚洲精品久久久久久久久久久久久久| av电影天堂一区二区在线| 偷拍视频一区二区| 国产91足控脚交在线观看| 色妞www精品视频| 九九热视频免费| 妖精一区二区三区精品视频| 久久激情五月丁香伊人| aaa人片在线| 九九**精品视频免费播放| 精品一区二区三区日本| 精品美女在线观看视频在线观看| 亚洲va在线va天堂| 天堂在线中文在线| 伊人久久大香线蕉无限次| 久久精品国产免费观看| 久久久久久久久久免费视频 | 波多野结衣一区二区| 亚洲美女在线国产| 天天爽人人爽夜夜爽| 高潮久久久久久久久久久久久久| 国产一区二区日韩| 日韩精品一卡二卡| 国产一区二区毛片| 视频二区一区| 伊人久久在线| 精品乱人伦一区二区三区| 国产黄色片在线| 午夜在线视频观看日韩17c| 亚洲一区久久久| 日韩伦理在线观看| 日本久久精品电影| 午夜一区二区三区免费| 欧美日韩蜜桃| 91久久精品久久国产性色也91| 国产最新视频在线观看| 激情av一区二区| 日本天堂在线播放| 欧美一区二区| 91在线网站视频| 日本视频在线播放| 欧美日韩综合色| 自拍偷拍中文字幕| 老司机一区二区三区| 国产一区二区三区高清| a级毛片免费观看在线| 欧美色窝79yyyycom| 久久精品国产亚洲av麻豆| 日韩天天综合| 韩国一区二区三区美女美女秀| 成人在线免费看片| 欧美美女一区二区在线观看| 免费黄色片网站| 日韩黄色免费电影| 五月天色一区| 2019年精品视频自拍| 亚洲香蕉成人av网站在线观看| 国产乱国产乱老熟| wwwwww.欧美系列| 大肉大捧一进一出好爽视频| 美日韩黄色大片| 国产91ⅴ在线精品免费观看| 性xxxx视频| 狠狠干狠狠久久| 中国毛片在线观看| 日韩黄色小视频| 一区二区在线不卡| 在线成人免费| 欧美成在线观看| 免费观看黄色一级视频| 狠狠躁夜夜躁人人躁婷婷91| 国产精品九九九九九| 首页国产欧美久久| 一区二区三区四区免费视频| 久久av网站| 久久99久国产精品黄毛片入口| 亚洲精品97久久中文字幕无码| 亚洲第一主播视频| 四虎永久免费在线观看| 蜜桃一区二区三区在线观看| 日韩视频在线免费播放| 91精品丝袜国产高跟在线| 久久全国免费视频| 国产毛片av在线| 欧美精品第1页| 国产一级在线免费观看| 99久久久精品| 一女被多男玩喷潮视频| 亚洲人成色77777| 男人添女人下面高潮视频| 日韩av资源在线| 黄色成人免费看| 国产探花在线观看视频| 日韩中文字幕组| 亚洲欧美激情国产综合久久久| 亚洲成人资源在线| 实拍女处破www免费看| 蜜臀av国产精品久久久久| 992tv快乐视频| 天天躁日日躁狠狠躁欧美| 国产精品com| 丝袜中文在线| 国产亚洲激情在线| 精品国产乱码一区二区三| 天天操天天色综合| 啪啪一区二区三区| 91污在线观看| 国产乱叫456| 一区二区三区四区五区精品视频| 无遮挡亚洲一区| 国产另类在线| 91久久久国产精品| 免费成人动漫| 欧美人与性动交| jizzjizz在线观看| 亚洲精品国产拍免费91在线| 国产又爽又黄免费软件| 一本大道av一区二区在线播放| 日韩在线视频网址| 国产亚洲一区字幕| 亚洲国产欧美日韩在线| 日本亚洲欧美天堂免费| 欧美视频在线免费播放| 亚洲国产一区二区三区在线播放| 久久香蕉综合色| 99a精品视频在线观看| 国产日本欧美一区二区三区在线| 麻豆成全视频免费观看在线看| 久久精品青青大伊人av| porn视频在线观看| 亚洲精品中文字幕av| 肥臀熟女一区二区三区| 91 com成人网| 成人免费一区二区三区| 日韩欧美国产免费播放| 国产在线免费视频| 亚洲女爱视频在线| 午夜激情视频在线播放| 日本一区二区三区久久久久久久久不 | 日韩欧美极品在线观看| 久久久久久国产精品视频| 国产精品乱码妇女bbbb| 国产精品国产三级国产专业不| 99久久婷婷国产综合精品| 在线看黄色的网站| 国产aⅴ精品一区二区三区色成熟| 日本国产一级片| 麻豆成人91精品二区三区| 日本999视频| 日本色综合中文字幕| 欧美伦理片在线看| 日本在线不卡视频一二三区| 少妇人妻互换不带套| 久久久亚洲一区| 欧美精品成人网| 亚洲第一伊人| www.中文字幕在线| 国产一级一区二区| 无码aⅴ精品一区二区三区浪潮| 日韩视频免费| 乱妇乱女熟妇熟女网站| 亚洲欧美日韩视频二区| 成人黄色片视频| 日本在线不卡视频一二三区| 天天操天天爱天天爽| 久久激情五月激情| 波多野结衣免费观看| 国产精品一区二区在线观看不卡| www.偷拍.com| 国产91色综合久久免费分享| 大尺度做爰床戏呻吟舒畅| 99久久免费精品高清特色大片| 亚洲av无码一区二区二三区| 国产欧美一区二区精品性色| 欧美人与禽zoz0善交| 亚洲三级电影网站| 九九九在线视频| 激情成人在线视频| 欧美另类高清videos的特点| 欧美日韩日日骚| www.麻豆av| 亚洲黄一区二区| 东热在线免费视频| 久久精品国产69国产精品亚洲| 日本三级在线观看网站| 91福利视频网| 久久亚洲国产精品尤物| 99在线视频免费观看| 亚洲国产合集| 伊人久久99| 亚洲神马久久| 污污网站免费看| 成人黄色大片在线观看| 级毛片内射视频| 亚洲综合无码一区二区| 青草视频在线观看免费| 91精品国产日韩91久久久久久| 免费的黄色av| 俺去啦;欧美日韩| 欧美13videosex性极品| 91久久精品美女高潮| 亚洲8888| 国产成人一二三区| 美女黄网久久| 自拍偷拍激情视频| 国产视频一区二区在线观看| 一区二区成人免费视频| 色婷婷狠狠综合| 精品人妻一区二区三区含羞草 | 欧洲av一区| 欧美精品国产一区二区| 日韩精品一区二区三区色欲av| 国产精品1024| 日本美女xxx| 婷婷久久综合九色综合绿巨人| 97在线视频人妻无码| 亚洲人成电影在线| wwwwxxxx在线观看| 成人久久18免费网站图片| 九九综合久久| 日韩 欧美 视频| 国产一区二区三区黄视频 | 中文字幕乱码在线| 亚洲三级视频在线观看| 国产三级理论片| 亚洲第一区中文99精品| 天天色天天射天天综合网| 成人免费看片39| 久久久久久网址| 亚洲欧洲专区| 日韩精彩视频| 国产精品日韩久久久| 久久黄色一级视频| 国产精品久久久久7777按摩| 成人毛片在线播放| 亚洲成年人在线| 18+激情视频在线| 91老司机在线| melody高清在线观看| 日韩欧美一级二级三级久久久| av在线播放网站| 国产成人鲁鲁免费视频a| 亚洲8888| 日本黄网站免费| 97久久超碰国产精品| 日本午夜小视频| 亚洲电影免费观看高清完整版在线| 亚洲资源一区| 亚洲综合在线小说| 综合av在线| 丰满饥渴老女人hd| 亚洲精品成人精品456| 国产免费一区二区三区最新不卡| 在线日韩第一页| 欧美网站免费| 亚洲图色在线| 精品一区二区三区不卡| 男人在线观看视频| 337p亚洲精品色噜噜| 国产淫片在线观看| 99re6热在线精品视频播放速度| 国产大片一区| av在线免费看片| 亚洲欧美一区二区久久| 国内毛片毛片毛片毛片| 欧美极品少妇xxxxⅹ喷水| 国产伦精品一区二区三区免费优势 | 三级在线观看网站| 国产69精品久久久久9| 农村少妇一区二区三区四区五区 | 成人一级生活片| 成人国产电影网| 黄色在线免费观看| 在线成人激情视频| 亚洲成人精品综合在线| 中文字幕在线中文| 91亚洲永久精品| 中文亚洲av片在线观看| 久久精品在线视频| 久久丝袜视频| 成人亚洲视频在线观看| 亚洲欧洲三级电影| 欧美一级一区二区三区| 欧美专区第一页| 欧美成人激情| 91视频在线免费| 91黄视频在线观看| а√中文在线8| 精品久久久久久亚洲| 久久国产精品99精品国产 | 欧美特级黄色录像| 91精品啪在线观看国产60岁| 91黄页在线观看| 亚洲春色在线视频| 成人午夜免费av| 免费黄色小视频在线观看| 欧美成人合集magnet| 精品中文字幕一区二区三区av| 亚洲娇小娇小娇小| 亚洲www啪成人一区二区麻豆| 国产爆初菊在线观看免费视频网站| 亚洲综合在线播放| 日韩电影在线观看一区| 久久久久久久久毛片| 亚洲美女视频网站| 日本一区二区三区播放| 欧美激情国产精品日韩| 亚洲女爱视频在线| 国产有码在线| 国产精品视频入口| 激情六月婷婷综合| 亚洲欧美另类在线视频| 欧美激情免费看| 日韩在线欧美|