国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

java 自定義生成驗證碼

共 28694字,需瀏覽 58分鐘

 ·

2024-03-22 18:00

說明

項目登錄或者其他重要的操作中都要生成驗證碼,其重要性在此不多說。

主要是介紹自己封裝的驗證碼生成工具類的使用。


建議安裝lombok插件,不使用此插件則需要手動生成get、set方法

此工具類不需要引入第三方j(luò)ar依賴。

驗證碼說明:

驗證碼由數(shù)字和字母組成

支持自定義驗證碼位數(shù)

支持自定義驗證碼生成規(guī)則

支持自定義驗證碼圖片寬高

支持驗證碼生成圖片保存到指定路徑

支持驗證碼轉(zhuǎn)成base64編碼

支持自定義驗證碼文件和base64編碼前綴格式

效果展示

da33b0155d795fc095d297d9c29a0368.webp

Base64編碼的文件類型枚舉類

      
         
      
      
        import lombok.Getter;
      
      
        
          
@Getter public enum Base64FileTypeEnum { // 文件類型 BASE64_FILETYPE_DOC(".doc", "data:application/msword;base64"), BASE64_FILETYPE_DOCX(".docx", "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64"), BASE64_FILETYPE_XLS(".xls", "data:application/vnd.ms-excel;base64"), BASE64_FILETYPE_XLSX(".xlsx", "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64"), BASE64_FILETYPE_PDF(".pdf", "data:application/pdf;base64"), BASE64_FILETYPE_PPT(".ppt", "data:application/vnd.ms-powerpoint;base64"), BASE64_FILETYPE_PPTX(".pptx", "data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64"), BASE64_FILETYPE_TXT(".txt", "data:text/plain;base64"),
// 圖片類型 BASE64_FILETYPE_PNG(".png", "data:image/png;base64"), BASE64_FILETYPE_JPG(".jpg", "data:image/jpeg;base64"), BASE64_FILETYPE_JPEG(".jpeg", "data:image/jpeg;base64"), BASE64_FILETYPE_GIF(".gif", "data:image/gif;base64"), BASE64_FILETYPE_SVG(".svg", "data:image/svg+xml;base64"), BASE64_FILETYPE_ICO(".ico", "data:image/x-icon;base64"), BASE64_FILETYPE_BMP(".bmp", "data:image/bmp;base64");
private String code; private String value;
private Base64FileTypeEnum(String code, String value) { this.code = code; this.value = value; }

}


驗證碼默認(rèn)常量值
      
        
          
/** * 說明: 驗證碼常量 * * @param * @author zhangxiaosan * @create 2022/11/25 * @return */ public interface ValidateCodeConstant { /** * 說明: 默認(rèn)驗證碼長度 * * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ Integer size = 4;
/** * 說明: 驗證碼圖片寬 * * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ Integer width = 120;
/** * 說明: 驗證碼圖片高 * * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ Integer height = 40;
/** * 說明: 生成的圖片格式,默認(rèn)jpg * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ String imgType = Base64FileTypeEnum.BASE64_FILETYPE_JPG.getCode().replaceAll("\\.","");
/** * 說明: 生成的base64前綴,默認(rèn)jpg * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ String base64Prefix = Base64FileTypeEnum.BASE64_FILETYPE_JPG.getValue() + ",";
/** * 說明: 驗證碼生成圖片存儲地址,默認(rèn)不存放圖片 * @author zhangxiaosan * @create 2022/11/25 * @param * @return */ String saveImagePath = null; }


驗證碼生成工具類

      
        
          
import org.springframework.util.StringUtils; import sun.misc.BASE64Encoder; import www.three.commom.constant.ValidateCodeConstant; import www.three.commom.enums.Base64FileTypeEnum;
import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.*; import java.util.*;
/** * 說明: * 生成驗證碼工具類 * * @author 張小三 * @create 2022-11-24 22:48 * @verson 1.0.0 */ public class ValidateCodeUtil { private static Random random = new Random();
private static Color getRandColor(int fc, int bc) { if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); }
private static int getRandomIntColor() { int[] rgb = getRandomRgb(); int color = 0; for (int c : rgb) { color = color << 8; color = color | c; } return color; }
private static int[] getRandomRgb() { int[] rgb = new int[3]; for (int i = 0; i < 3; i++) { rgb[i] = random.nextInt(255); } return rgb; }
private static void shear(Graphics g, int w1, int h1, Color color) { shearX(g, w1, h1, color); shearY(g, w1, h1, color); }
private static void shearX(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(2);
boolean borderGap = true; int frames = 1; int phase = random.nextInt(2);
for (int i = 0; i < h1; i++) { double d = (double) (period >> 1) * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); g.copyArea(0, i, w1, 1, (int) d, 0); if (borderGap) { g.setColor(color); g.drawLine((int) d, i, 0, i); g.drawLine((int) d + w1, i, w1, i); } }
}
private static void shearY(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(40) + 10; // 50;
boolean borderGap = true; int frames = 20; int phase = 7; for (int i = 0; i < w1; i++) { double d = (double) (period >> 1) * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); g.copyArea(i, 0, 1, h1, 0, (int) d); if (borderGap) { g.setColor(color); g.drawLine(i, (int) d, i, 0); g.drawLine(i, (int) d + h1, i, h1); }
} }
/** * 生成指定長度的隨機(jī)數(shù)字和字母 * * @param length * @return */ private static String getStringRandom(int length) { String val = ""; Random random = new Random(); for (int i = 0; i < length; i++) { String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; switch (charOrNum) { case "char": int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; val += (char) (random.nextInt(26) + temp); break; case "num": val += String.valueOf(random.nextInt(10)); break; } } return val; }
/** * 創(chuàng)建Base64編碼的驗證碼圖片 * * @param w 寬 * @param h 高 * @param code 驗證碼 * @return * @throws Exception */ private static ByteArrayOutputStream imageToBase64Byte(int w, int h, String code) throws Exception { int verifySize = code.length(); BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Random rand = new Random(); Graphics2D g2 = image.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Color[] colors = new Color[5]; Color[] colorSpaces = new Color[]{Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.YELLOW}; float[] fractions = new float[colors.length]; for (int i = 0; i < colors.length; i++) { colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; fractions[i] = rand.nextFloat(); } Arrays.sort(fractions);
g2.setColor(Color.GRAY);// 設(shè)置邊框色 g2.fillRect(0, 0, w, h);
Color c = getRandColor(200, 250); g2.setColor(c);// 設(shè)置背景色 g2.fillRect(0, 2, w, h - 4);
// 繪制干擾線 Random random = new Random(); g2.setColor(getRandColor(160, 200));// 設(shè)置線條的顏色 for (int i = 0; i < 20; i++) { int x = random.nextInt(w - 1); int y = random.nextInt(h - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g2.drawLine(x, y, x + xl + 40, y + yl + 20); }
// 添加噪點(diǎn) float yawpRate = 0.05f;// 噪聲率 int area = (int) (yawpRate * w * h); for (int i = 0; i < area; i++) { int x = random.nextInt(w); int y = random.nextInt(h); int rgb = getRandomIntColor(); image.setRGB(x, y, rgb); }
shear(g2, w, h, c);// 使圖片扭曲
g2.setColor(getRandColor(100, 160)); int fontSize = h - 4; Font font = new Font("Arial", Font.ITALIC, fontSize); g2.setFont(font); char[] chars = code.toCharArray(); for (int i = 0; i < verifySize; i++) { AffineTransform affine = new AffineTransform(); affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize / 2, h / 2); g2.setTransform(affine); g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); } g2.dispose(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, ValidateCodeConstant.imgType, baos); return baos; //return new Base64().encodeToString(baos.toByteArray()); //return new BASE64Encoder().encode(baos.toByteArray()); //return Base64.getEncoder().encodeToString(baos.toByteArray()); }

/** * 創(chuàng)建Base64編碼的驗證碼圖片,并保存到指定的路徑 * * @param w 寬 * @param h 高 * @param code 驗證碼 * @param savePath 驗證碼圖片保存的地址 * @return String 單行的base64編碼,攜帶文件前綴 * @throws Exception */ private static String createValidateCodeImageBase(Integer w, Integer h, String code, String savePath) throws Exception { ByteArrayOutputStream baos = imageToBase64Byte(w, h, code); if (StringUtils.hasText(savePath)) { try { File file = new File(savePath); FileOutputStream write = new FileOutputStream(file); byte[] decode = Base64.getEncoder().encode(new BASE64Encoder().encode(baos.toByteArray()).getBytes()); write.write(decode); write.close(); } catch (IOException e) { e.printStackTrace(); } } // 返回不換行的編碼 return ValidateCodeConstant.base64Prefix + Base64.getEncoder().encodeToString(baos.toByteArray()); }
/** * 說明: 生成自定義驗證碼 圖片大小 * 驗證碼寬為 120,高為40,長度為4位,不生成為圖片存放 * * @param * @return String 單行的base64編碼,攜帶文件前綴 * @author zhangxiaosan * @create 2022/11/24 */ public static Map<String, Object> createValidateCodeImage(Integer w, Integer h, String code, String savePath) throws Exception { String validateCodeImage = createValidateCodeImageBase(w, h, code, savePath); Map<String, Object> res = new HashMap<String, Object>(); res.put("code", code); res.put("base64", validateCodeImage); res.put("w", w); res.put("h", h); res.put("uuid",UUID.randomUUID()); return res; }

/** * 說明: 生成默認(rèn)的驗證碼 * 驗證碼寬為 120,高為40,長度為4位,不生成為圖片存放 * * @param * @return String 單行的base64編碼,攜帶文件前綴 * @author zhangxiaosan * @create 2022/11/24 */ public static Map<String, Object> createValidateCodeImage() throws Exception { String code = getStringRandom(ValidateCodeConstant.size); return createValidateCodeImage( ValidateCodeConstant.width, ValidateCodeConstant.height, code, ValidateCodeConstant.saveImagePath); }
/** * 說明: 生成自定義驗證碼位數(shù) * 驗證碼寬為 120,高為40,長度為4位,不生成為圖片存放 * * @param * @return String 單行的base64編碼,攜帶文件前綴 * @author zhangxiaosan * @create 2022/11/24 */ public static Map<String, Object> createValidateCodeImage(Integer size) throws Exception { String code = getStringRandom(size); return createValidateCodeImage(ValidateCodeConstant.width, ValidateCodeConstant.height, code, ValidateCodeConstant.saveImagePath); }
/** * 說明: 生成自定義驗證碼 圖片大小 * 長度為4位,不生成為圖片存放 * * @param * @return String 單行的base64編碼,攜帶文件前綴 * @author zhangxiaosan * @create 2022/11/24 */ public static Map<String, Object> createValidateCodeImage(Integer w, Integer h) throws Exception { String code = getStringRandom(ValidateCodeConstant.size); return createValidateCodeImage(ValidateCodeConstant.width, ValidateCodeConstant.height, code, ValidateCodeConstant.saveImagePath); }
/** * 說明: 生成自定義驗證碼 圖片大小 * 長度為4位,不生成為圖片存放 * * @param * @return String 單行的base64編碼,攜帶文件前綴 * @author zhangxiaosan * @create 2022/11/24 */ public static Map<String, Object> createValidateCodeImage(Integer w, Integer h,Integer size) throws Exception { String code = getStringRandom(size); return createValidateCodeImage( w, h, code, ValidateCodeConstant.saveImagePath); }
}


使用

      
        public static void main(String[] args) throws Exception {
      
      
             ValidateCodeUtil.createValidateCodeImage().forEach((k,v)->{
      
      
                 System.out.println(k+":"+v);
      
      
             });
      
      
         }
      
      
        
          

結(jié)果如下:

      
        code: mo1U
      
      
        w: 120
      
      
        base64: data:image/jpeg;base64,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
      
      
        h: 40
      
      
        uuid: 404d2e57-f666-4958-9557-2c113af654bf
      
      
        
          


結(jié)果說明:
w : 寬
h :高
code: 驗證碼
uuid: 驗證碼唯一標(biāo)識
base64:驗證碼圖片編碼,可以傳給前端在html 的 <img src=‘’ "/ > 中展示驗證碼圖片




瀏覽 54
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 婷婷色婷婷| 久草视频资源| se99av| 五月av| 一级免费视频| 欧美第1页| 国产无遮挡A片又黄又爽小直播 | 日韩中文字幕免费在线观看| 久久中文字幕视频| 狠狠干天天操| 天堂a在线8| 色婷婷7777| 天天干在线观看视频| 午夜成人福利视频| 韩国中文字幕HD久久| 黑人无码| 亚欧精品久久久久久久久久久| 美女做爱网站| 日韩精品人妻中文字幕| 尤物无码| 成人无码区免费AV毛片| 99精品视频在线观看免费| 成人中文字幕在线| 无码人妻一区二区三区免费n鬼沢 北京熟妇槡BBBB槡BBBB | 国产欧美日韩三级| 高清无码免费在线视频| 成人精东影业JDAV3密友| 68久久久| 嘿咻无码推油| 91蜜桃婷婷狠狠久久综合9色| 91精品久久久久久| 国产黄色在线视频| 国产成人aV| 东京热这里只有精品| 亚洲无码在线播放| 日本激情网站| 在线免费观看黄色电影| 四虎一区| 另类图片亚洲色图| 草视频| 人妻少妇无码| 性爱视频免费网站| 日本黄色大片| 久久草草热国产精品| 国产www在线观看| 天天肏屄| 高清无码电影| 欧美精品在线播放| 日韩视频一区二区三区| 成人在线免费视频观看| 首页-91n| 91狠狠综合久久| 88av在线| 日韩AV免费| 欧美黄网站| 东京热视频网站| 91五月天| 黄片免费视频| 白浆四溢av| 欧美一在线一综合| 米奇7777狠狠狠狠| 蜜臀av一区二区三区| 免费V片在线观看| 四虎在线观看视频| 2020人妻中文字幕| 不卡无码中文字幕| 日韩国产三级| 九一无码| 99久久伊人| 18精品爽国产冫绿帽社| 国产动态图| 国产美女一级真毛片酒店| XXXXⅩHD亚洲人HD| jizz在线观看| 一道本高清无码| 亚洲天堂一区二区三区| 91麻豆精品传媒国产| 无码人妻一区二区三区线花季传件| 在线观看的av| 亚洲成人高清| 另类老妇奶性生BBwBB| 性99网站| 五月天久久久久久| 国产成人精品片| 久久久偷拍视频| 日本中文字幕在线免费观看| 黑人一区二区三区四区| 久操网在线| 大香蕉大香蕉视频网| 一起草在线视频| 西西人体444rt高清大胆模特| av婷婷在线| 色五月婷婷五月| 亚洲va国产va天堂va久久| 丁香激情五月天| 激情五月天婷婷| xiuxiuav| 色图插插插| 亚洲小骚逼| 97精品久久| 在线免费观看黄色视频网站| 成人午夜福利视频| 大香蕉伊人网站| 国产高清一区二区| 五月天无码视频| 欧美日韩在线免费观看| 国产熟女一区二区视频网站| 黄色视频免费观看| 亚洲综合网在线观看| 国产乱╳╳AⅤ毛片| 日韩日韩日韩日韩| 日韩av中文字幕在线| 国产一级a毛一级a毛观看视频网站 | 欧美午夜激情视频| 国产黄片免费视频| 日本AⅤ在线观看| 99在线播放| 伊人99| 国产97热人人| 欧美激情婷婷| 成人黃色A片免费看| 日皮网站在线观看| 亚洲.欧美.丝袜.中文.综合| 国产一级aa| 国产在线观看国产精品产拍| 日韩综合在线| 色综合网址| 综综综综合网| 99久re热视频精品98| 婷婷在线电影| 91女人18毛片水多的意思| 中文字幕福利| AV天堂国产| 天天草夜夜操| 奥门黄片| 成人小说一区二区三区| 九九综合久久| 国产成人亚洲日韩| 中文字幕一区二区三区人妻在线视频 | 久久久久国产精品视频| 豆花视频免费| 成人免费激情视频| 亚洲AV免费看| 特级西西444WWW大精品视频 | 国产欧美精品一区二区| 91久久爽久久爽爽久久片| 日都一级A片| 日本色中文字幕| 五月天一区二区三区| 亚洲中文字幕在线看| 中文在线字幕电视剧免费平台| 色老板在线观看| 黄色免费在线观看网站| 97人妻精品一区二区三区软件| 国产九九热视频| 天天插天天狠天天透| 国产爱搞| 99久久99久国产黄毛片| 天天日bb| 影音先锋亚洲AV| 在线亚洲免费| 国产精品成人AV在线| 中韩AV在线免费观看| 无码在线视频播放| 国产麻豆精品成人免费视频| 亚洲制服在线观看| 99热这里只有精品9| 国产精品久久久久久亚洲毛片| 国产精品久久7777777精品无码 | 欧美视频综合网| 日韩無码专区| 亚洲AV无码国产综合专区| 91爽爽| 在线一区| 大香蕉伊人网视频| 午夜天堂在线观看| 黄色二区| 黄色一区二区三区| 色婷婷AV在线观看| 丰满人妻一区二区三区四区54| 久久久久久久久免费看无码| 91嫩草欧美久久久九九九| 亚洲高清福利| 国产免费久久久| 99久在线精品99re8| 污视频在线免费观看| 内射午夜福利在线免费观看视频| 欧美老妇XX| 国产午夜激情视频| 七十路の高齢熟女千代子| 亚洲人成电影| 日日擼夜夜擼| 国产av一区二区三区四区| 国产黄色三级| 国产性爱自拍一下| 91视频入口| 91国产在线播放| 久久亚洲天堂| 日韩一级性爱| 欧洲AV在线| 免费看一区二区三区| 一级片在线| 五月天色色图| 婷婷丁香一区二区三区| 久草免费在线| 日本色情视频网站| 中文字幕无码在线观看视频| 欧美一级婬片免费视频华泰老添妇| 国产无套进入免费| 国产永久在线| 狠狠操在线观看| 亚洲高清在线视频| 久久日精品| AV2014天堂网| 久久人妻中文字幕| www.伊人大香蕉| 成人毛片18女人毛片真水| 亚洲三级片视频| 日韩中文字| 国产传媒一区| 蜜桃视频成人app| 日韩一级在线| 日韩成人AV电影| 97精品人人妻人人| 日韩不卡在线| 亚洲天堂在线免费观看视频| 青青草91视频| 91视频亚洲| 天天久久毛片| 黄色在线视频网站| 国产免费一区二区三区| 国产亚洲视频免费观看| 国产在线视频一区二区三区| 操逼黄色视频| 在线播放a| 欧美18禁网站| 一级片在线播放| 天天日AV| 大香蕉网伊| 成人大香蕉| 俺来也俺去也www色官| 操逼视频免费播放| 国精久久久久| 性生活无码视频| 亚洲人体视频| 久久嫩草精品| 女生操逼网站| 嫩操影院| a片在线免费播放| 福利导航在线| 97这里只有精品| 99久久精品国产一区二区三区| 一区二区三区四区久久| 69堂在线观看| 热久久91| 精品三级片| 久久久久久久久黄色| 国产一a毛一a毛A免费| 二区AV| 久久91精品| 欧美性精品| 精品国产一级A片黄毛网站| 四川少妇BBBB| 精品九九九| 成人在线第一页| 99久久99久久精品免费看蜜桃| 操一线天逼| 极品一线天小嫩嫩真紧| 午夜成人福利| 俺去啦俺去啦| 特黄AV| 人人操人人干人人妻| 国产成人免费做爰视频| 老熟女17页一91| 麻豆AV片| 五月综合色| 男女一区| 999免费视频| 中文字幕日本电影| AV2014天堂网| 中文无码在线| 国产愉拍91九色国产愉拍| 国产激情网站| 国产永久在线| 成人午夜福利电影| 日韩精品成人在线视频| 亚洲香蕉在线视频| 香蕉国产AV| 俺来俺也去www色在线观看| 日本欧美国产| 十八禁网站在线播放| 麻豆人妻换人妻好紧| 精品国产AV鲁一鲁一区| 欧美成人精品激情在线视频| 国产欧美精品在线观看| 国产精品二| 巨い巨乳の少妇あジed2k| 日韩中文字幕在线人成网站| 中文字幕毛片| 国产乱╳╳AⅤ毛片| 国产一页| 男女性爱视频网站| 日本中文字幕在线视频| 在线播放毛片| 日韩欧美小视频| 日本三级片免费| 青青草免费观看视频| 中文字幕的色| 国产操b视频| 欧美操逼视频| aaaaaa在线观看免费高清| 大香蕉国产视频| 久色婷婷| 中文字幕日韩人妻| 日本aaaa片| 在线中文字幕网站| 逼逼视频| 超碰人妻在线| 亚洲精品女人| 欧美老妇性猛交| 黄色中文字幕| 在线国产视频| 一区二区三区www污污污网站| 日本黄色电影网址| 嫩草导航| 夜夜嗨老熟女AV一区二区三区 | 中文字幕在线观看AV| 丁香五月激情啪啪| 丁香五月AV| 中文字幕东京热| 久久凹凸视频| 成人精品福利| 精品小视频| 国产91久久婷婷一区二区| 操逼大全| 亚洲a电影| 伊人大香蕉网| 亚洲综合在线播放| 午夜做爱福利视频| 在线a| 性做久久久久久| 思思热在线观看视频| 久久六月天| 亚洲无码电影网站| 小小拗女BBw搡BBBB搡| sesese999| 日韩亚洲中文在线| 亚洲.欧美.丝袜.中文.综合| 日本色色网站免费| 九九九在线视频| 秋霞精品一区二区三区| 操逼电影网站| 午夜无码鲁丝片午夜精品一区二区| 国产小视频在线看| 中文字幕日韩高清| 91视频在线看| 久久午夜无码鲁丝| 中文字幕精品无码| 91在线不卡| 亚洲欧美成人| 国产高潮白浆喷| 国产97热人人| 国产区欧美去区在线| AV性爱社区| 9797色色| 免费一级婬片AA片观看| ww亚洲ww| 色色色综合| 国产美女精品视频| 久草视频在线播放| 欧美三级片网| 中文无码精品欧美日韩| 国产精品欧美一区二区三区苍井空 | 北条麻妃无码一区二区| 伊人精品大香蕉| 亚洲无码精品在线观看| 视频國产在线| 日本午夜福利电影| 香蕉成人视频| 色综合天天综合网国产成人网 | 91久久电影| 综合天堂网| 五月涩| 久久久在线视频| 国产一级AAAAA片免费| 久久久久久久久久国产精品| 青青操成人| www.91国产| 91人妻人人澡人人爽人人DVD| 久久久精品人妻| 91精品日韩| 麻豆三级精品| 国产一级a毛一级a毛视频在线网站 | 狠狠躁18三区二区一区免费人| 思思操在线视频| aa无码| 97精品人妻一区二区三区香蕉| 亚洲口味重一级黄片| av手机版| 久久久久女人精品毛片九一| 伊人在线| 欧美成人黄色小说| 精品国产AV色一区二区深夜久久| 色婷婷丁香五月天| 天天干天天干天| 国产精品爽爽久久久| 亚洲,制服,综合,中文| 久久大香蕉网| 久久黄色免费看| 中文字幕国产在线| 欧美日屄视频| 亚洲精品欧美久久婷婷| 青青自拍视频| 国产高清无码福利| 美妇肥臀一区二区三区-久久99精品国| 黃色级A片一級片| 免费无码国产在线| 西西444WWW大胆无| 婷婷爱五月| 久久久久亚洲AV无码成人片 | 人妻黄色视频| 国产亚洲婷婷| 无码中文字幕在线观看| 国产3区| 一级片免费观看视频| 中文字幕视频一区| 亚洲国产爱| 男女性爱视频网站| 久久久久久久| A级片在线观看| 五月丁香六月色| 特黄特黄免费看| 超碰在线看| 呦小性Free小U女HD| 婷婷五月天激情丁香| A片视频在线观看| 五月婷婷操逼| 爱爱电影无码| 成人在线网| 日韩亚洲欧美在线观看| 在线观看日韩精品| 青青草东路热vv| 老鸭窝在线观看视频| 刘玥精品国产一区二区三区| 国产乱国产乱老熟300视频| 中文字幕乱码人妻二区三区| 污污污污污www网站免费观看 | 2024天天操| 影音先锋女人aV鲁色资源网站| 嫩BBB槡BBBB槡BBB| 日本在线视频一区二区| 成人TV| 日本一级片在线播放| 国产在线拍揄自揄拍无码福利| 伊人在线视频观看| 18禁成人A∨片| 国产无码免费| 日韩日屄视频| 国产欧美日韩视频| 天天操夜夜操视频免费高清| 欧美在线中文字幕| 91导航| 日韩中文AV| 粉嫩一区二区三区四区| 日本黄色视频在线| 京东一热本色道久久爱| 国产又爽又黄视频在线看| 国产成人女人在线观看| 日日干天天| 婷婷精品国产一区二区三区日韩 | 一区二区三区免费观看| 国产成人无码一区二区| 蝌蚪久久| 日本精品视频在线| 欧美人操逼一二区| 操逼影视| 日韩欧美第一页| 亚洲高清无码视频在线播放| 成人三级AV在线| 日本天堂网| 北条麻妃中文字幕在线观看| 另类国产| 亚洲中文视频免费| 南京搡BBBB搡BBBB| 成人三级视频在线观看| 国产黄a| 狠狠干B| 国产黄色AV片| 亚洲狠狠干| 思思操| 国产成人激情视频| www.日本黄色| 中文字幕av高清片,中文在线观看| 自拍偷拍无码| 大地99中文在线观看| 91久久精品日日躁夜夜躁欧美| 无码人妻丰满熟妇区毛片蜜桃麻豆 | 黄色激情在线| 亚洲在线中文| 亚洲无码免费在线视频| 免费岛国av大片| 黄色免费在线观看视频| 在线观看污网站| 中文字幕免费观看视频| 无码国精品一区二区免费蜜桃| 天堂在线最新资源| 无码人妻一区二区一牛影视| 日韩中文一区| 秘亚洲国产精品成人网站| 中文字幕在线视频无码| 在线观看AV无码| 一级AV片| 91女人18毛片水多的意思| 俺来也在线视频| 欧美中文字幕视频| 青娱乐国产精品一区二区| 天天视频色版免费观看视频| 国产一区二区无码| 亚洲免费三级| 国产91精品久久久天天| 国产亚洲精品午夜福利巨大软件| 手机看片福利视频| 强奸校花到高潮| 91无码在线观看| 另类小说五月天| 国产色情视频在线观看| eeuss久久| 亚洲精品18在线观看| 中国免费视频高清观看| 午夜A片| 亚洲无码在线播放| 91人妻人人澡人人爽人人精品乱| BBB搡BBB搡BBB搡BBB| 日韩精品中文无码| 先锋影音一区| 中文字幕视频一区日日骚| 亚洲日韩中文字幕在线观看| 亚洲第一页在线观看| 91视频国产精品| 性九九九九九九| 一区二区三区四区| 欧洲无码一区二区三区| 麻豆91免费视频| 中文字幕免费高清| 熟妇人妻中文字幕无码老熟妇| 久久一二三区| 99久久99久久久精品棕色圆| 一区二区成人视频| 69亚洲| 国产女人18| 免费无码A片在线观看全| 日本A视频| 插吧插吧网| 黄频在线观看| 亚洲第一黄网| 精品一区二区三区在线观看| 久久午夜无码鲁丝| 国产成人精品久久二区二区91| 大香蕉伊人导航| 日韩中文字幕一区二区三区| 亚洲色吧| 97精品| 亚洲自拍偷拍视频| 91蝌蚪网| 亚洲色图另类| 欧美V∧| 五月天三级片| 久久一二三| 精品久久久久久亚洲| 精品精品视频| 啪视频网站国产馆| 亚洲第一网无码性色| 五月丁香在线视频| 久久久久久亚洲Av无码精品专口 | 男女内射视频| 韩国一级av| 日本综合在线| 中文熟女| 黄色电影中文字幕| 亚洲天堂精品在线| 国产精品V亚洲精品V日韩精品| 丰满人妻| 伊人影院在线看| 永久免费叼嘿| 国产精品一区二区黑人巨大| 国产乱伦熟女| 手机看片久草| 亚洲精品乱码久久久久久按摩观| 黄片www| 99热这里只有精品9| 在线观看污视频| 无码精品人妻一区二区三刘亦菲| 丁香婷婷一区二区三区| www| 日批免费视频| 亚洲激情片| 国产精品porn| 毛片操逼| 久操青青| 五月天三级片| 丰满人妻一区二区三区四区53 | 国产免费观看av| 亚洲精品视频在线观看网站| 中文字幕免费| 色墦五月丁香| 黄片免费大全| 欧美激情一区二区| 国产成人午夜| 国产A片免费看| 夜夜操夜夜爽| 毛片福利| 成人精品三级AV在线看| 黄色一级录像| 六月婷婷综合| 911亚洲精品| 成人精品午夜无码免费| 夸克看成人片一级A片| 动漫一区二区三区| 欧美黄色一级网站| 中文字幕一二三四| 五月丁香中文| 人成视频免费观看| 操逼操逼操逼操逼操逼操逼| 三级黄色视频| 91无码精品国产AⅤ| 超碰97成人| 亚洲综合中文字幕在线播放| 国产精品免费一区二区三区四区视频| 一级a一级a爱片兔兔软件| 人人草人人看人人摸| 成人黄色性视频| 无码人妻丰满熟妇精品区| 一级黄色在线观看| 国产做受精品网站在线观看| 无码av亚洲一区二区毛片公司| 无码人妻日本| 无码东京热国产| 怡春院中文字幕| 久热国产精品| 神马影院午夜福利| 国产色视频一区二区三区QQ号| 谁有毛片网址| 欧美黑人大吊| 亚洲成人二区| 日韩中文字幕在线高清| 激情日韩| 色播网址| 欧美精品一级| 嘿咻嘿咻动态图| av电影在线免费观看| 91嫩草久久久久久久| 成人网站视频| 免费AV网站在线| 97超碰在线视| 蜜臀av一区| 特级西西| A免费观看| 中文字幕精品一区久久久久| 91视频播放| 一级免费黄片| 玖玖资源在线| 午夜aaa| 国产大鸡巴| 操B网站| 欧美色性乐汇操日本娘们| 极品美女扒开粉嫩小泬高潮一| 大香蕉最新国产2025| 在线中文字幕在线观看| 波多野无码| 天天天天色| gogogo免费高清在线偷拍| 亚洲成人在线一区| 天天草天天日| 人妻丰满精品一区二区| 美女一级A片| 天天天天日天天干| 蜜桃系列一区二区精品| 夜夜操夜夜骑| 波多野结衣久久中文字幕| 色噜噜AV| 成人无码人妻| 日韩精品视频在线免费观看| 欧美日韩精品久久久免费观看| 秋霞A片| 97无码精品人妻| 欧美日日| 韩国高清无码视频| 天天射日日干| 国产小视频在线观看| 伊人成人视频在线观看| 亚洲性爱一区二区三区| 午夜爱爱免费视频| 亚洲无码中| 国产成人大香蕉| JlZZJLZZ亚洲美女18| 激情五月天丁香| 今天成全在线观看高清| 天天干天天操天天射| 蜜桃黄片AV在线观看| av人人| 91精品91久久久中77777| 91高潮久久久久久久| 97国产成人| 色五月婷婷基地| 欧美八区| 91在线精品一区二区| 免费看无码网站成人A片| 88海外华人免费一区| 五月丁香视频在线| 免费在线观看内射| 午夜无码三级| 91视频在线免费看| 内射极品美女| 亚洲综合中文| 91熟女丰满原味| 丁香五月亚洲综合| 亚洲综合中文字幕在线播放| 国产最新av| 国产精品自拍偷拍| 免费无码进口视频| 日屄视频在线观看| 亚洲欧美大香蕉视频网| 69堂在线观看| 亚洲中字幕| 午夜福利视频网站| 黄色网页在线免费观看| 99er视频| 日韩看片| 人妻精品一区二区在线| 天堂中文资源在线观看| 男女拍拍网站| 亚洲69p| 亚洲无码网址| 婷婷色图| www欧美| 久久精品6| 人妻少妇偷人精品无码免费| 嫩BBB搡BBBB搡BBBB| 大香蕉熟女| 3d动漫精品一区二区三区在线观看| 91麻豆福利视频| 91香蕉在线观看| 日韩毛片视频| 日韩精品成人av| 囯产精品久久久久久久久免费无码 | 2021狠狠操| 久久久国产一区| 成人免费激情视频| 一卡二卡无码| 亚洲日韩中文字幕| 日韩视频免费观看高清完整版在线观| 国产极品久久久| 天天日少妇| 中文字幕第10页| 亚洲xxxxx| 少妇大战28厘米黑人| 老司机狠狠干| 久久久久久久久成人| 天堂A片| 操美女的网站| 国产成人精品无码片子的价格| 不卡日韩| 免费看黄片的网站| 黄色无码网站| 国产顶级理伦| 欧美日韩三级在线| 婷婷色色五月| 亚洲自拍中文字幕| 成人激情综合| 91探花视频精选在线播放| 日韩AAA| 裸体黄色一极大片| 五月天婷婷网址| 亚洲乱码中文字幕| 无码人妻精品一区二区三千菊电影| 日韩高清无码一区二区| 日韩人妻精品无码久久边| 青娱乐国产精品一区二区| 国产又爽又黄A片| 97精品在线观看| 亚洲va国产天堂va久久en | 在线观看一区二区视频| 久久亚洲日韩天天做日日做综合亚洲 | 欧美MV日韩MV国产网站| 成人片免费| 国产福利在线观看| 欧美精品在线观看| 欧美精品欧美精品系列| 强伦轩一区二区三区在线观看| 大香蕉久久久久久| 人人妻人人草| 18禁片网站| 男女91视频| 久久久一| 欧美五月婷婷| 国产三级国产三级国产普通话 | 精品久久无码中文字幕| 亚洲中文字幕视频在线| 影音先锋成人资源网| 一区二区久久| 日本一级片中文字幕| 久操网在线| 蜜臀AV成人精品| 日本黄色电影网站| 国产精品偷拍视频| 艹逼在线观看| 男女日比视频| 无码三级在线免费观看| 亚洲精品福利视频导航| 亚洲女人视频| 国产suv精品一区二区| 91视频成人版一区二区| 无码蜜桃一区二区| 国产在线视频一区二区三区| 国产毛片视频| 中文字幕日韩无码片| av久操| 欧美一级免费观看| 黄片视频在线观看| 特黄视频在线观看| 一道本无码在线观看| 亚洲中文AV| 国产精品外围| 蜜桃Av噜噜一区二区三区四区| 日本翔田千里奶水| 无码不卡视频| 色丁香在线| 91无码秘蜜桃一区二区三区-百度| 自拍偷拍无码| 黄片高清免费观看| 91精品国产成人做爰观看奶头 | 日日久视频| 秋霞福利网| 一区二区视频免费| 97色色视频| 狠狠躁日日躁夜夜躁A片小说免费| 乌克兰毛片| 国产精品熟女| 欧美激情四射| 亚洲无码小电影| 2019中文字幕在线免费观看| 欧美MV日韩MV国产网站| 国产黄色影院| 大香蕉伊人青青草| 亚洲一级视频在线观看| 99热这里只有精品99| 亚洲超级高清无码第一在线视频观看| 亚洲精选中文字幕| 手机看片久久| 综合激情av| 成人无码电影在线观看| 在线国产视频| 亚洲无码免费在线视频| 北条麻妃在线不卡| 性色网站| 亚洲毛片亚洲毛片亚洲毛片 | 久久婷婷视频| 中文字幕无码一区二区三区一本久| 久久精品内射| 亚洲无码二区| 91在线无码精品秘入口电车| 国产A片免费| 欧美色视频在线观| 国产精品无码免费| www.五月天| 午夜成人在线| 一区无码视频| 日本一区不卡| 无码av在线观看| 精品一区二| 国产AV小电影| 国产亲子乱A片免费视频| 操逼网123首页| 中文字幕第69页| 操逼网址| 国产免费久久久| 9i看片成人免费视频| 日韩二| 中文字幕亚洲无码视频| 国产AV一级| 亚洲av二区| 日韩AⅤ| 亚洲欧美色图| 国产又爽又黄视频在线看| 久久e热| 激情视频免费看| 搡老熟女-91Porn| 农村A片婬片AAA毛片| 欧美三级视频在线| 亚洲无码高清视频在线| 黄色视频在线观看亚洲一区二区三区免费 | 国产免费高清视频| 黄色片免费看| 国内精品久久久久久久久久变脸 | 亚洲中午字幕| 麻豆视频在线看| 影音先锋女人av噜噜色| 亚洲AV无码国产精品| 免费在线观看亚洲| 国产高清自拍视频|