日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringBoot+2次MD5登录密码加密+MyBatisPlus+Thymeleaf+Bootstrap简单实现登录功能,一文轻松搞定!

發(fā)布時(shí)間:2024/1/18 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot+2次MD5登录密码加密+MyBatisPlus+Thymeleaf+Bootstrap简单实现登录功能,一文轻松搞定! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這里寫目錄標(biāo)題

  • 一、演示GIF
  • 二、開發(fā)前期準(zhǔn)備
    • 1、數(shù)據(jù)庫(kù)
    • 2、依賴POM.XML
    • 3、idea結(jié)構(gòu)目錄
  • 三、后端
    • 1、實(shí)體類
    • 2、mapper接口
    • 3、mapper.xml
    • 4、Servicce接口
    • 5、Impl實(shí)現(xiàn)
    • 6、Controller控制器
    • 7、全局異常處理類
      • GlobalException
      • GlobalExceptionHandler
    • 8、工具類
      • MD5Util
      • UUIDUtil
      • CookieUtil
      • ValidatorUtil
    • 9、手機(jī)號(hào)處理類
      • validator
      • IsMobileValidator
    • 10、Vo類
      • LoginVo
      • RespBean
      • RespBeanEnum
  • 四、前端
      • login.html
      • list.html

一、演示GIF


本文通過(guò)SpringBoot+2次MD5登錄密碼加密+MyBatisPlus+Thymeleaf+bootstrap簡(jiǎn)單實(shí)現(xiàn)登錄功能

  • 登錄時(shí)手機(jī)號(hào)作為賬號(hào)有驗(yàn)證
  • 密碼作為2次MD5加密
  • MybatisPlus開發(fā)時(shí)方便 高效
  • Bootstrap作為前端框架

二、開發(fā)前期準(zhǔn)備

1、數(shù)據(jù)庫(kù)

CREATE TABLE `t_user` (`id` bigint(20) NOT NULL COMMENT '用戶ID shoujihaoma',`nickname` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,`pasword` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'MD5二次加密',`slat` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`head` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '頭像',`register_date` datetime DEFAULT NULL COMMENT '注冊(cè)時(shí)間',`last_login_date` datetime DEFAULT NULL COMMENT '最后一次登錄時(shí)間',`login_count` int(11) DEFAULT '0' COMMENT '登錄次數(shù)',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

2、依賴POM.XML

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- MD5依賴--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><!-- validation 參數(shù)校驗(yàn)-->`在這里插入代碼片`<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

3、idea結(jié)構(gòu)目錄

三、后端

1、實(shí)體類

package com.seckilldemo.pojo;import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode;import java.io.Serializable; import java.util.Date;/*** <p>** </p>** @author syj* @since 2023-01-14*/ @Data @EqualsAndHashCode(callSuper = false) @TableName("t_user") public class User implements Serializable {private static final long serialVersionUID = 1L;/*** 用戶ID shoujihaoma*/private Long id;private String nickname;/*** MD5二次加密*/private String pasword;private String slat;/*** 頭像*/private String head;/*** 注冊(cè)時(shí)間*/private Date registerDate;/*** 最后一次登錄時(shí)間*/private Date lastLoginDate;/*** 登錄次數(shù)*/private Integer loginCount;}

2、mapper接口

package com.seckilldemo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.seckilldemo.pojo.User;/*** <p>* Mapper 接口* </p>** @author syj* @since 2023-01-14*/ public interface UserMapper extends BaseMapper<User> {}

3、mapper.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.seckilldemo.mapper.UserMapper"><!-- 通用查詢映射結(jié)果 --><resultMap id="BaseResultMap" type="com.seckilldemo.pojo.User"><id column="id" property="id" /><result column="nickname" property="nickname" /><result column="pasword" property="pasword" /><result column="slat" property="slat" /><result column="head" property="head" /><result column="register_date" property="registerDate" /><result column="last_login_date" property="lastLoginDate" /><result column="login_count" property="loginCount" /></resultMap><!-- 通用查詢結(jié)果列 --><sql id="Base_Column_List">id, nickname, pasword, slat, head, register_date, last_login_date, login_count</sql></mapper>

4、Servicce接口

package com.seckilldemo.service;import com.baomidou.mybatisplus.extension.service.IService; import com.seckilldemo.pojo.User; import com.seckilldemo.vo.LoginVo; import com.seckilldemo.vo.RespBean;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** <p>* 服務(wù)類* </p>** @author syj* @since 2023-01-14*/ public interface IUserService extends IService<User> {RespBean doLogin(LoginVo loginVo, HttpServletResponse response, HttpServletRequest request); }

5、Impl實(shí)現(xiàn)

package com.seckilldemo.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.seckilldemo.exception.GlobalException; import com.seckilldemo.mapper.UserMapper; import com.seckilldemo.pojo.User; import com.seckilldemo.service.IUserService; import com.seckilldemo.utils.CookieUtil; import com.seckilldemo.utils.MD5Util; import com.seckilldemo.utils.UUIDUtil; import com.seckilldemo.utils.ValidatorUtil; import com.seckilldemo.vo.LoginVo; import com.seckilldemo.vo.RespBean; import com.seckilldemo.vo.RespBeanEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** <p>* 服務(wù)實(shí)現(xiàn)類* </p>** @author syj* @since 2023-01-14*/ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@Autowiredprivate UserMapper userMapper;@Overridepublic RespBean doLogin(LoginVo loginVo, HttpServletResponse response, HttpServletRequest request){String mobile = loginVo.getMobile();String password = loginVo.getPassword(); // if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)){ // return RespBean.error(RespBeanEnum.LOGIN_ERROR); // } // if(!ValidatorUtil.isMobile(mobile)){ // return RespBean.error(RespBeanEnum.MOBILE_ERROR); // }User user = userMapper.selectById(mobile);//根據(jù)手機(jī)號(hào)獲取用戶if (null == user){throw new GlobalException(RespBeanEnum.LOGIN_ERROR);}//判斷密碼是否正確if(!MD5Util.fromPassToDBPass(password,user.getSlat()).equals(user.getPasword())){throw new GlobalException(RespBeanEnum.LOGIN_ERROR);}//生成cokieString ticket = UUIDUtil.uuid();request.getSession().setAttribute(ticket,user);CookieUtil.setCookie(request,response,"userTicket",ticket);return RespBean.success();} }

6、Controller控制器

package com.seckilldemo.controller;import com.seckilldemo.service.IUserService; import com.seckilldemo.utils.ValidatorUtil; import com.seckilldemo.vo.LoginVo; import com.seckilldemo.vo.RespBean; import com.seckilldemo.vo.RespBeanEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid;@Controller @RequestMapping("/login") @Slf4j public class LoginController {@Autowiredprivate IUserService userService;@RequestMapping("/toLogin")public String toLogin(){return "login";}@RequestMapping("/doLogin")@ResponseBodypublic RespBean doLogin(@Valid LoginVo loginVo, HttpServletRequest request, HttpServletResponse response){return userService.doLogin(loginVo,response,request);}}

7、全局異常處理類

  • GlobalException

package com.seckilldemo.exception;import com.seckilldemo.vo.RespBean; import com.seckilldemo.vo.RespBeanEnum;/*** 全局異常** @author: LC* @date 2022/3/2 5:32 下午* @ClassName: GlobalException*/ public class GlobalException extends RuntimeException {private RespBeanEnum respBeanEnum;public RespBeanEnum getRespBeanEnum() {return respBeanEnum;}public void setRespBeanEnum(RespBeanEnum respBeanEnum) {this.respBeanEnum = respBeanEnum;}public GlobalException(RespBeanEnum respBeanEnum) {this.respBeanEnum = respBeanEnum;} }
  • GlobalExceptionHandler

package com.seckilldemo.exception;import com.seckilldemo.vo.RespBean; import com.seckilldemo.vo.RespBeanEnum; import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;/*** 全局異常處理類** @author: LC* @date 2022/3/2 5:33 下午* @ClassName: GlobalExceptionHandler*/ @RestControllerAdvice public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public RespBean ExceptionHandler(Exception e) {if (e instanceof GlobalException) {GlobalException exception = (GlobalException) e;return RespBean.error(exception.getRespBeanEnum());} else if (e instanceof BindException) {BindException bindException = (BindException) e;RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);respBean.setMessage("參數(shù)校驗(yàn)異常:" + bindException.getBindingResult().getAllErrors().get(0).getDefaultMessage());return respBean;}System.out.println("異常信息" + e);return RespBean.error(RespBeanEnum.ERROR);} }

8、工具類

  • CookieUtil
package com.seckilldemo.utils;import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;/*** Cookie工具類** @author: LC* @date 2022/3/2 5:48 下午* @ClassName: CookieUtil*/ public final class CookieUtil {/*** 得到Cookie的值, 不編碼** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName) {return getCookieValue(request, cookieName, false);}/*** 得到Cookie的值,** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {Cookie[] cookieList = request.getCookies();if (cookieList == null || cookieName == null) {return null;}String retValue = null;try {for (int i = 0; i < cookieList.length; i++) {if (cookieList[i].getName().equals(cookieName)) {if (isDecoder) {retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");} else {retValue = cookieList[i].getValue();}break;}}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return retValue;}/*** 得到Cookie的值,** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {Cookie[] cookieList = request.getCookies();if (cookieList == null || cookieName == null) {return null;}String retValue = null;try {for (int i = 0; i < cookieList.length; i++) {if (cookieList[i].getName().equals(cookieName)) {retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);break;}}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return retValue;}/*** 設(shè)置Cookie的值 不設(shè)置生效時(shí)間默認(rèn)瀏覽器關(guān)閉即失效,也不編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue) {setCookie(request, response, cookieName, cookieValue, -1);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效,但不編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage) {setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);}/*** 設(shè)置Cookie的值 不設(shè)置生效時(shí)間,但編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, boolean isEncode) {setCookie(request, response, cookieName, cookieValue, -1, isEncode);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效, 編碼參數(shù)*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage, boolean isEncode) {doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效, 編碼參數(shù)(指定編碼)*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage, String encodeString) {doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);}/*** 刪除Cookie帶cookie域名*/public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,String cookieName) {doSetCookie(request, response, cookieName, "", -1, false);}/*** 設(shè)置Cookie的值,并使其在指定時(shí)間內(nèi)生效** @param cookieMaxage cookie生效的最大秒數(shù)*/private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {try {if (cookieValue == null) {cookieValue = "";} else if (isEncode) {cookieValue = URLEncoder.encode(cookieValue, "utf-8");}Cookie cookie = new Cookie(cookieName, cookieValue);if (cookieMaxage > 0)cookie.setMaxAge(cookieMaxage);if (null != request) {// 設(shè)置域名的cookieString domainName = getDomainName(request);System.out.println(domainName);if (!"localhost".equals(domainName)) {cookie.setDomain(domainName);}}cookie.setPath("/");response.addCookie(cookie);} catch (Exception e) {e.printStackTrace();}}/*** 設(shè)置Cookie的值,并使其在指定時(shí)間內(nèi)生效** @param cookieMaxage cookie生效的最大秒數(shù)*/private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,String cookieName, String cookieValue, int cookieMaxage, String encodeString) {try {if (cookieValue == null) {cookieValue = "";} else {cookieValue = URLEncoder.encode(cookieValue, encodeString);}Cookie cookie = new Cookie(cookieName, cookieValue);if (cookieMaxage > 0) {cookie.setMaxAge(cookieMaxage);}if (null != request) {// 設(shè)置域名的cookieString domainName = getDomainName(request);System.out.println(domainName);if (!"localhost".equals(domainName)) {cookie.setDomain(domainName);}}cookie.setPath("/");response.addCookie(cookie);} catch (Exception e) {e.printStackTrace();}}/*** 得到cookie的域名*/private static final String getDomainName(HttpServletRequest request) {String domainName = null;// 通過(guò)request對(duì)象獲取訪問的url地址String serverName = request.getRequestURL().toString();if (serverName == null || serverName.equals("")) {domainName = "";} else {// 將url地下轉(zhuǎn)換為小寫serverName = serverName.toLowerCase();// 如果url地址是以http://開頭 將http://截取if (serverName.startsWith("http://")) {serverName = serverName.substring(7);}int end = serverName.length();// 判斷url地址是否包含"/"if (serverName.contains("/")) {//得到第一個(gè)"/"出現(xiàn)的位置end = serverName.indexOf("/");}// 截取serverName = serverName.substring(0, end);// 根據(jù)"."進(jìn)行分割final String[] domains = serverName.split("\\.");int len = domains.length;if (len > 3) {// www.xxx.com.cndomainName = domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];} else if (len <= 3 && len > 1) {// xxx.com or xxx.cndomainName = domains[len - 2] + "." + domains[len - 1];} else {domainName = serverName;}}if (domainName != null && domainName.indexOf(":") > 0) {String[] ary = domainName.split("\\:");domainName = ary[0];}return domainName;} }
  • MD5Util

package com.seckilldemo.utils;import org.apache.commons.codec.digest.DigestUtils; import org.springframework.stereotype.Component;@Component public class MD5Util {public static String md5(String src){return DigestUtils.md5Hex(src);}private static final String salt="1a2b3c4d";public static String inpuntPassToFromPass(String inputPass){String str = "" +salt.charAt(0)+salt.charAt(2)+inputPass+salt.charAt(5)+salt.charAt(4);return md5(str);}public static String fromPassToDBPass(String fromPass,String salt){String str = "" +salt.charAt(0)+salt.charAt(2)+fromPass+salt.charAt(5)+salt.charAt(4);return md5(str);}public static String inputPassToDBPass(String inputPass,String salt){String fromPass = inpuntPassToFromPass(inputPass);String dbPass = fromPassToDBPass(fromPass, salt);return dbPass;}public static void main(String[] args) {//d3b1294a61a07da9b49b6e22b2cbd7f9System.out.println(inpuntPassToFromPass("123456"));System.out.println(fromPassToDBPass("d3b1294a61a07da9b49b6e22b2cbd7f9","1a2b3c4d"));System.out.println(inputPassToDBPass("123456","1a2b3c4d"));} }
  • UUIDUtil

package com.seckilldemo.utils;import java.util.UUID;/*** UUID工具類** @author: LC* @date 2022/3/2 5:46 下午* @ClassName: UUIDUtil*/ public class UUIDUtil {public static String uuid() {return UUID.randomUUID().toString().replace("-", "");} }
  • CookieUtil

package com.seckilldemo.utils;import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;/*** Cookie工具類** @author: LC* @date 2022/3/2 5:48 下午* @ClassName: CookieUtil*/ public final class CookieUtil {/*** 得到Cookie的值, 不編碼** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName) {return getCookieValue(request, cookieName, false);}/*** 得到Cookie的值,** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {Cookie[] cookieList = request.getCookies();if (cookieList == null || cookieName == null) {return null;}String retValue = null;try {for (int i = 0; i < cookieList.length; i++) {if (cookieList[i].getName().equals(cookieName)) {if (isDecoder) {retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");} else {retValue = cookieList[i].getValue();}break;}}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return retValue;}/*** 得到Cookie的值,** @param request* @param cookieName* @return*/public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {Cookie[] cookieList = request.getCookies();if (cookieList == null || cookieName == null) {return null;}String retValue = null;try {for (int i = 0; i < cookieList.length; i++) {if (cookieList[i].getName().equals(cookieName)) {retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);break;}}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return retValue;}/*** 設(shè)置Cookie的值 不設(shè)置生效時(shí)間默認(rèn)瀏覽器關(guān)閉即失效,也不編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue) {setCookie(request, response, cookieName, cookieValue, -1);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效,但不編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage) {setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);}/*** 設(shè)置Cookie的值 不設(shè)置生效時(shí)間,但編碼*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, boolean isEncode) {setCookie(request, response, cookieName, cookieValue, -1, isEncode);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效, 編碼參數(shù)*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage, boolean isEncode) {doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);}/*** 設(shè)置Cookie的值 在指定時(shí)間內(nèi)生效, 編碼參數(shù)(指定編碼)*/public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,String cookieValue, int cookieMaxage, String encodeString) {doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);}/*** 刪除Cookie帶cookie域名*/public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,String cookieName) {doSetCookie(request, response, cookieName, "", -1, false);}/*** 設(shè)置Cookie的值,并使其在指定時(shí)間內(nèi)生效** @param cookieMaxage cookie生效的最大秒數(shù)*/private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {try {if (cookieValue == null) {cookieValue = "";} else if (isEncode) {cookieValue = URLEncoder.encode(cookieValue, "utf-8");}Cookie cookie = new Cookie(cookieName, cookieValue);if (cookieMaxage > 0)cookie.setMaxAge(cookieMaxage);if (null != request) {// 設(shè)置域名的cookieString domainName = getDomainName(request);System.out.println(domainName);if (!"localhost".equals(domainName)) {cookie.setDomain(domainName);}}cookie.setPath("/");response.addCookie(cookie);} catch (Exception e) {e.printStackTrace();}}/*** 設(shè)置Cookie的值,并使其在指定時(shí)間內(nèi)生效** @param cookieMaxage cookie生效的最大秒數(shù)*/private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,String cookieName, String cookieValue, int cookieMaxage, String encodeString) {try {if (cookieValue == null) {cookieValue = "";} else {cookieValue = URLEncoder.encode(cookieValue, encodeString);}Cookie cookie = new Cookie(cookieName, cookieValue);if (cookieMaxage > 0) {cookie.setMaxAge(cookieMaxage);}if (null != request) {// 設(shè)置域名的cookieString domainName = getDomainName(request);System.out.println(domainName);if (!"localhost".equals(domainName)) {cookie.setDomain(domainName);}}cookie.setPath("/");response.addCookie(cookie);} catch (Exception e) {e.printStackTrace();}}/*** 得到cookie的域名*/private static final String getDomainName(HttpServletRequest request) {String domainName = null;// 通過(guò)request對(duì)象獲取訪問的url地址String serverName = request.getRequestURL().toString();if (serverName == null || serverName.equals("")) {domainName = "";} else {// 將url地下轉(zhuǎn)換為小寫serverName = serverName.toLowerCase();// 如果url地址是以http://開頭 將http://截取if (serverName.startsWith("http://")) {serverName = serverName.substring(7);}int end = serverName.length();// 判斷url地址是否包含"/"if (serverName.contains("/")) {//得到第一個(gè)"/"出現(xiàn)的位置end = serverName.indexOf("/");}// 截取serverName = serverName.substring(0, end);// 根據(jù)"."進(jìn)行分割final String[] domains = serverName.split("\\.");int len = domains.length;if (len > 3) {// www.xxx.com.cndomainName = domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];} else if (len <= 3 && len > 1) {// xxx.com or xxx.cndomainName = domains[len - 2] + "." + domains[len - 1];} else {domainName = serverName;}}if (domainName != null && domainName.indexOf(":") > 0) {String[] ary = domainName.split("\\:");domainName = ary[0];}return domainName;} }
  • ValidatorUtil

package com.seckilldemo.utils;import org.thymeleaf.util.StringUtils;import java.util.regex.Matcher; import java.util.regex.Pattern;public class ValidatorUtil {private static final Pattern mobile_patten = Pattern.compile("[1]([3-9])[0-9]{9}$");public static boolean isMobile(String mobile){if(StringUtils.isEmpty(mobile)){return false;}Matcher matcher = mobile_patten.matcher(mobile);return matcher.matches();}}

9、手機(jī)號(hào)處理類

  • validator

package com.seckilldemo.validator; import com.seckilldemo.utils.ValidatorUtil;import javax.validation.Constraint; import javax.validation.Payload; import javax.validation.Validator; import javax.validation.constraints.NotNull; import java.lang.annotation.*;/*** 驗(yàn)證手機(jī)號(hào)** @author: LC* @date 2022/3/2 3:05 下午* @ClassName: isMobile*/ @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = {IsMobileValidator.class} ) public @interface IsMobile {boolean required() default true;String message() default "手機(jī)號(hào)碼格式錯(cuò)誤";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {}; }
  • IsMobileValidator

package com.seckilldemo.validator;import com.seckilldemo.utils.ValidatorUtil; import org.thymeleaf.util.StringUtils;import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;/*** 手機(jī)號(hào)碼校驗(yàn)規(guī)則** @author: LC* @date 2022/3/2 3:08 下午* @ClassName: IsMobileValidator*/ public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {private boolean required = false;@Overridepublic void initialize(IsMobile constraintAnnotation) { // ConstraintValidator.super.initialize(constraintAnnotation);required = constraintAnnotation.required();}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {if (required) {return ValidatorUtil.isMobile(s);} else {if (StringUtils.isEmpty(s)) {return true;} else {return ValidatorUtil.isMobile(s);}}} }

10、Vo類

  • LoginVo

package com.seckilldemo.vo;import com.seckilldemo.validator.IsMobile; import lombok.Data; import org.hibernate.validator.constraints.Length;import javax.validation.constraints.NotNull;@Data public class LoginVo {@NotNull@IsMobileprivate String mobile;@NotNull@Length(min = 32)private String password;}
  • RespBean

package com.seckilldemo.vo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;/*** 公共返回對(duì)象** @author: LC* @date 2022/3/2 1:50 下午* @ClassName: RespBean*/ @Data @NoArgsConstructor @AllArgsConstructor public class RespBean {private long code;private String message;private Object object;public static RespBean success() {return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBeanEnum.SUCCESS.getMessage(), null);}public static RespBean success(Object object) {return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBean.success().getMessage(), object);}public static RespBean error(RespBeanEnum respBeanEnum) {return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(), null);}public static RespBean error(RespBeanEnum respBeanEnum, Object object) {return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(), object);}}
  • RespBeanEnum

package com.seckilldemo.vo;import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString;/*** 公共返回對(duì)象枚舉** @author: LC* @date 2022/3/2 1:44 下午* @ClassName: RespBean*/ @Getter @ToString @AllArgsConstructor public enum RespBeanEnum {//通用SUCCESS(200, "SUCCESS"),ERROR(500, "服務(wù)端異常"),//登錄模塊LOGIN_ERROR(500210, "用戶名或者密碼不正確"),MOBILE_ERROR(500211, "手機(jī)號(hào)碼格式不正確"),BIND_ERROR(500212, "參數(shù)校驗(yàn)異常"),MOBILE_NOT_EXIST(500213, "手機(jī)號(hào)碼不存在"),PASSWORD_UPDATE_FAIL(500214, "更新密碼失敗"),SESSION_ERROR(500215, "用戶SESSION不存在"),//秒殺模塊EMPTY_STOCK(500500, "庫(kù)存不足"),REPEATE_ERROR(500501, "該商品每人限購(gòu)一件"),REQUEST_ILLEGAL(500502, "請(qǐng)求非法,請(qǐng)重新嘗試"),ERROR_CAPTCHA(500503, "驗(yàn)證碼錯(cuò)誤,請(qǐng)重新輸入"),ACCESS_LIMIT_REACHED(500504, "訪問過(guò)于頻繁,請(qǐng)稍后重試"),//訂單模塊5003xxORDER_NOT_EXIST(500300, "訂單不存在"),;private final Integer code;private final String message;}

四、前端

  • login.html

<!DOCTYPE html> <html lang="en"xmlns:th="http://www.thymeleaf.org"> <head><meta charset="UTF-8"><title>登錄</title><!-- jquery --><script type="text/javascript" th:src="@{/js/jquery.min.js}"></script><!-- bootstrap --><link rel="stylesheet" type="text/css" th:href="@{/bootstrap/css/bootstrap.min.css}"/><script type="text/javascript" th:src="@{/bootstrap/js/bootstrap.min.js}"></script><!-- jquery-validator --><script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script><script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script><!-- layer --><script type="text/javascript" th:src="@{/layer/layer.js}"></script><!-- md5.js --><script type="text/javascript" th:src="@{/js/md5.min.js}"></script><!-- common.js --><script type="text/javascript" th:src="@{/js/common.js}"></script> </head> <body> <form name="loginForm" id="loginForm" method="post" style="width:50%; margin:0 auto"><h2 style="text-align:center; margin-bottom: 20px">用戶登錄</h2><div class="form-group"><div class="row"><label class="form-label col-md-4">請(qǐng)輸入手機(jī)號(hào)碼</label><div class="col-md-5"><input id="mobile" name="mobile" class="form-control" type="text" placeholder="手機(jī)號(hào)碼" required="true"/><!-- 取消位數(shù)限制 minlength="11" maxlength="11"--></div><div class="col-md-1"></div></div></div><div class="form-group"><div class="row"><label class="form-label col-md-4">請(qǐng)輸入密碼</label><div class="col-md-5"><input id="password" name="password" class="form-control" type="password" placeholder="密碼"required="true"/><!-- 取消位數(shù)限制 minlength="6" maxlength="16"--></div></div></div><div class="row"><div class="col-md-5"><button class="btn btn-primary btn-block" type="reset" onclick="reset()">重置</button></div><div class="col-md-5"><button class="btn btn-primary btn-block" type="submit" onclick="login()">登錄</button></div></div> </form> </body> <script>function login() {$("#loginForm").validate({submitHandler: function (form) {doLogin();}});}function doLogin() {g_showLoading();var inputPass = $("#password").val();var salt = g_passsword_salt;var str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);var password = md5(str);$.ajax({url: "/login/doLogin",type: "POST",data: {mobile: $("#mobile").val(),password: password},success: function (data) {layer.closeAll();if (data.code == 200) {layer.msg("成功");console.log(data);document.cookie = "userTicket=" + data.object;window.location.href = "/goods/toList";} else {layer.msg(data.message);}},error: function () {layer.closeAll();}});} </script> </html>
  • list.html

<!DOCTYPE html> <html lang="en"xmlns:th="http://www.thymeleaf.org"> <head><meta charset="UTF-8"><title>商品列表</title> </head> <body><p th:text="'Hello:'+${user.nickname}"></p> </body> </html>

總結(jié)

以上是生活随笔為你收集整理的SpringBoot+2次MD5登录密码加密+MyBatisPlus+Thymeleaf+Bootstrap简单实现登录功能,一文轻松搞定!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

成人毛片久久 | 精品一二三区视频 | 999电影免费在线观看 | 天天曰天天 | 精品久久久久_ | 国产手机在线视频 | 国产不卡在线 | 中文字幕中文字幕在线一区 | 欧美日韩一区二区三区免费视频 | 精品国产乱码久久 | 日本精品久久久久久 | 手机av在线免费观看 | 波多野结衣视频一区二区 | 黄色精品在线看 | 天天色天天操综合网 | 六月丁香色婷婷 | 四虎最新域名 | 成年人黄色免费网站 | 免费观看一级成人毛片 | 五月天久久综合网 | 国语久久| 久久少妇免费视频 | 黄色av免费电影 | 激情深爱.com | 国产a国产 | a视频在线观看 | 午夜色场| 国产免费久久精品 | 亚洲第一中文网 | 久久精品国产一区二区三 | 国产亚洲欧美一区 | 亚a在线| 日韩av线观看 | 久久免费大片 | 正在播放久久 | 又紧又大又爽精品一区二区 | a级片久久| 在线电影91 | 久草视频99 | 国产乱码精品一区二区蜜臀 | 91视频链接| 免费a视频在线 | 国产精品99免视看9 国产精品毛片一区视频 | 久久精品99国产精品亚洲最刺激 | 中文字幕在线观看资源 | 在线色亚洲 | 麻豆视频免费在线 | 黄色免费电影网站 | 欧美日韩性视频 | 欧美色综合天天久久综合精品 | 日韩av影视 | 欧美日韩精品在线免费观看 | 激情av在线播放 | 天天操天天添 | av网站播放 | 欧美另类高清 | 成人亚洲精品久久久久 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 亚洲欧洲在线视频 | 欧美一区二视频在线免费观看 | 日日躁夜夜躁aaaaxxxx | 91成人黄色| 久久午夜色播影院免费高清 | 日韩精品免费一区二区三区 | 日本超碰在线 | 久久成人精品 | 中文字幕视频 | 日韩黄色大片在线观看 | 久久精品久久国产 | 久久精品国产精品亚洲精品 | 国产日本在线 | 日韩网站在线 | 91成人黄色| 五月婷婷丁香六月 | 亚洲激情六月 | 97热视频 | 欧美怡红院视频 | 午夜精品久久久99热福利 | 黄色三级免费观看 | 韩国av免费看 | 黄色av网站在线观看免费 | 日韩网站中文字幕 | 91传媒视频在线观看 | 国产午夜剧场 | 在线观看91精品国产网站 | 中文字幕成人在线观看 | 国产免费xvideos视频入口 | 国产a精品| 网站免费黄 | 国产精品av免费在线观看 | 13日本xxxxxⅹxxx20 | 91视频 - x99av| 97视频精品 | 69精品久久久 | 日韩高清dvd | 一级欧美一级日韩 | 91.麻豆视频 | 日韩乱色精品一区二区 | 久久99国产精品久久99 | 日本三级国产 | 欧美激情va永久在线播放 | 免费亚洲片 | 久久久资源网 | 成人在线一区二区三区 | 91在线在线观看 | 在线免费观看视频 | 午夜黄色影院 | 欧洲不卡av | 久久久久综合网 | 成人黄色在线 | 一级一级一片免费 | 一区精品在线 | 日韩r级电影在线观看 | 色先锋资源网 | 天天操天天操天天操天天操天天操天天操 | 91免费国产在线观看 | 亚洲日本精品 | 青青网视频 | 国产精品一区二区久久久久 | 午夜精品一区二区三区可下载 | 精品久久久久久久久久久久久 | 91在线视频观看免费 | 久久这里只有精品久久 | 综合网伊人 | 91麻豆精品国产91久久久久久久久 | 99国内精品久久久久久久 | 国产亚洲成人精品 | 亚洲三级网| 欧美激情另类文学 | 香蕉影院在线 | 亚洲人人爱 | 色婷婷av国产精品 | 99热99热| 精品中文字幕在线播放 | 玖玖玖精品 | 国内成人精品2018免费看 | 精品亚洲欧美无人区乱码 | 国产精品18p| 99理论片 | 依人成人综合网 | 中文字幕久久精品 | 99色婷婷| 99视频久久| 九九九电影免费看 | 亚洲永久在线 | 久久热首页 | 亚洲国产最新 | 日韩欧美电影在线观看 | 在线天堂日本 | a特级毛片 | 欧美视频国产视频 | 五月天中文字幕 | 亚洲精品www | 亚洲欧洲一区二区在线观看 | 国产日产在线观看 | 在线观看91网站 | 粉嫩高清一区二区三区 | 综合五月 | 日韩欧美视频一区二区三区 | 日日操夜夜操狠狠操 | 欧美一区二区视频97 | 久久久久电影网站 | 在线 国产 亚洲 欧美 | 国产精品一区二区三区电影 | 香蕉久草| 欧美精品成人在线 | 欧美日韩大片在线观看 | 日韩电影精品 | 久久超碰免费 | 日日摸日日碰 | 久久综合色天天久久综合图片 | 91麻豆网站 | 久久久久久久久久久久久9999 | 五月天国产精品 | avsex| 午夜精品一区二区三区在线 | 国内精品久久久久影院优 | 久久久久97国产 | 欧美一级性 | 欧美极度另类 | 91在线www | 久久影院中文字幕 | 欧美日韩亚洲在线 | 亚洲精品资源在线观看 | 日日夜夜天天射 | 婷婷国产v亚洲v欧美久久 | 日韩亚洲在线 | 首页av在线| 久久久不卡影院 | 日韩在线中文字幕 | 三级黄色在线观看 | 狠狠干天天射 | 国产黄色免费 | 亚洲视频 在线观看 | 日本bbbb摸bbbb | 在线观看岛国 | 狠狠干天天色 | 日韩精品免费在线观看视频 | 欧亚久久 | 久草a在线 | 久久9精品| 国内精品久久久久久久久久清纯 | av免费在线观看1 | 黄色不卡av | 日韩欧美国产激情在线播放 | 婷婷六月网 | av线上看| 成人久久 | 91毛片在线观看 | 国产精品专区一 | 极品美女被弄高潮视频网站 | jizz18欧美18 | 国产午夜精品免费一区二区三区视频 | 日韩av一区二区在线影视 | 激情综合网色播五月 | 国产日韩在线一区 | zzijzzij日本成熟少妇 | 久久精品国产一区二区电影 | 韩国一区二区三区视频 | 狠狠躁日日躁狂躁夜夜躁 | 手机av电影在线观看 | 国产精品视频在线看 | 麻豆国产精品一区二区三区 | 狠狠色丁香九九婷婷综合五月 | 久久国产精品小视频 | 欧美亚洲免费在线一区 | 91九色丨porny丨丰满6 | 国产黄色免费在线观看 | 久久亚洲福利视频 | 97人人添人澡人人爽超碰动图 | 91网页版在线观看 | www成人精品 | 国产亚洲精品久久久久久久久久久久 | 伊人欧美 | 国产精品久久久久久麻豆一区 | 欧美国产不卡 | 国产在线国偷精品产拍 | 免费中文字幕在线观看 | 国产成人一区二区精品非洲 | 免费观看成人网 | 91高清在线| 亚洲日本精品视频 | 日韩欧美在线观看一区二区三区 | www天天干| 四虎国产精品免费观看视频优播 | 国产成人黄色网址 | 97成人精品视频在线播放 | 久草久热 | 国产专区在线看 | 亚洲国产97在线精品一区 | 天天操天天干天天综合网 | 天堂久久电影网 | 伊人影院av | 一区 二区电影免费在线观看 | a一片一级 | 日日干夜夜操视频 | 婷婷国产一区二区三区 | 97在线播放| 99久久99久久综合 | 四虎成人免费观看 | 国产一区二区日本 | 最近中文字幕高清字幕免费mv | 日韩中文字幕免费在线播放 | 久久久黄视频 | 色综合久久中文字幕综合网 | 久久精品理论 | 国语麻豆 | 深夜激情影院 | 毛片美女网站 | 国产精品毛片一区二区 | 久久艹久久 | 国产婷婷精品 | 欧美a视频 | 欧美午夜性生活 | 在线国产能看的 | 又黄又爽又无遮挡免费的网站 | 亚洲国产成人精品在线 | www久久99 | 日韩午夜剧场 | 狠狠综合久久av | 521色香蕉网站在线观看 | 五月婷婷久久丁香 | 国产成人久久77777精品 | 欧美一级高清片 | 欧美视频不卡 | 国产三级精品在线 | 中文字幕在线播放日韩 | 亚洲涩涩色 | 伊人电影在线观看 | 青青河边草免费 | 欧美久久成人 | 久久成人亚洲欧美电影 | 91喷水 | 天天草综合 | 国产精品永久在线 | 69精品在线观看 | 欧美另类交人妖 | 美女网色| 天天操天天爱天天干 | 国产区精品区 | 五月婷婷激情综合网 | 日本精品在线看 | 不卡的av电影在线观看 | 午夜国产一区 | 国产91精品一区二区绿帽 | 久热久草在线 | 91片黄在线观| 在线免费观看不卡av | 麻豆视频在线免费观看 | 91精品国产综合久久福利不卡 | 亚洲精品合集 | 国产原创av片 | 在线免费看片 | 亚洲女同ⅹxx女同tv | 精品国产成人av在线免 | 免费视频一级片 | 精品国产成人在线影院 | 欧美老女人xx | 国内综合精品午夜久久资源 | 97精品国产97久久久久久 | 欧美三级在线播放 | 国产123av| 91视频在线网址 | 欧美久草网| 国产精品久久一卡二卡 | 日韩午夜网站 | 久久久久亚洲精品成人网小说 | 看黄色.com | 黄色1级大片 | 一区二区 久久 | 日韩av黄| 不卡的av| 手机看片国产 | 91在线免费播放视频 | 国产精品区免费视频 | 99国产一区二区三精品乱码 | 久久久久久蜜桃一区二区 | 992tv又爽又黄的免费视频 | 国产精品一级视频 | 色a综合| 国语精品久久 | 精品欧美在线视频 | 久久一区二区三区超碰国产精品 | 婷婷丁香在线观看 | 国产偷v国产偷∨精品视频 在线草 | 91精品国产一区二区在线观看 | 国产亚洲小视频 | 米奇狠狠狠888 | 九九热在线视频免费观看 | 久久成年人网站 | 成人黄色小说在线观看 | 男女全黄一级一级高潮免费看 | av天天草| 激情欧美一区二区三区 | 日日日日干| 在线黄色av | 日本三级在线观看中文字 | 91视频免费网站 | 精品欧美日韩 | 欧洲精品码一区二区三区免费看 | 天天操天天射天天舔 | 亚洲精品中文字幕视频 | 婷婷丁香在线视频 | 久久人人射| 亚洲精品视频二区 | 日韩中文字幕在线观看 | 99久久久国产精品免费99 | 亚洲国产美女精品久久久久∴ | 国产中文字幕精品 | 日韩精品一区二 | 国产xxxx做受性欧美88 | 久久精品美女 | 91在线免费视频 | 亚洲综合色视频 | 久久这里只有精品23 | 久久久国产在线视频 | 国产成人久久久久 | 99精品视频免费观看 | 日韩精品一区二区三区三炮视频 | 免费看污片| 国产精品99久久久久人中文网介绍 | 日韩久久精品 | 99久久这里有精品 | 久久字幕网 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 天天躁日日躁狠狠躁 | 成人免费视频播放 | 日韩欧美精选 | 久久婷婷综合激情 | bbbb操bbbb| 黄色在线看网站 | 日本不卡视频 | 日韩在线观看a | 精品国产一区二区三区久久影院 | 干亚洲少妇| 在线观看日本韩国电影 | 亚洲成av人片在线观看www | 亚洲一区二区三区毛片 | 欧美 激情在线 | 在线一二区 | 亚洲一级免费观看 | 人人插人人费 | 一区二区三区在线视频111 | 欧美成人精品欧美一级乱黄 | 精品国产一区二 | 日本久久综合网 | av观看在线观看 | 国产男女无遮挡猛进猛出在线观看 | 国产成人一级 | 久久久久久久久久久久影院 | 国产主播大尺度精品福利免费 | 免费亚洲精品 | 成人国产精品 | 日韩免费在线观看 | 精品一二三四视频 | 麻豆91精品视频 | 国产二区电影 | 2023亚洲精品国偷拍自产在线 | 国产成人在线精品 | 欧美九九九 | 亚洲国产精品一区二区久久hs | 四虎成人精品 | 一区二区三区四区在线免费观看 | 91精品免费 | 免费在线观看日韩欧美 | 九七视频在线观看 | 日韩高清一 | 一区二区不卡 | 国产精品理论片在线观看 | 国产精品免费一区二区 | 国内免费的中文字幕 | 成人在线免费小视频 | 日本福利视频在线 | 久久露脸国产精品 | 天天综合网 天天 | wwwwww色| 国外av在线 | 国产成人精品一区二区三区福利 | 日韩不卡高清 | www好男人| 欧美视频xxx | 超碰人人草 | 深爱婷婷激情 | 国产伦精品一区二区三区在线 | 欧美在一区 | 亚洲在线看| 最近免费中文字幕mv在线视频3 | 久久久久久久久久影院 | 91av久久| 丁香综合网 | 日日干av| 特级毛片aaa | 久久久久久久久久久免费av | 久久99久久99免费视频 | 天天干天天天 | 日韩一区二区三区免费电影 | 欧美精品视 | 日韩| 久久成人午夜 | 国产成人av免费在线观看 | 日韩专区一区二区 | 狠狠操天天射 | 成人一区二区在线观看 | 狠狠操操| 色婷婷av一区 | 国产精品久久嫩一区二区免费 | 欧美一级在线观看视频 | 日韩高清国产精品 | 97国产一区 | 黄色精品一区 | 不卡的av在线 | 亚洲精品在线观看的 | av福利在线看 | 精品视频免费久久久看 | 天天操天天干天天操天天干 | 色丁香色婷婷 | 在线观看电影av | 91成人天堂久久成人 | 亚洲午夜久久久久 | 欧美综合久久 | 97精品在线视频 | 午夜影院先 | 久久久黄色免费网站 | 精品一二三四五区 | 黄色一级片视频 | 国产精品伦一区二区三区视频 | 99久久日韩精品视频免费在线观看 | 久久黄色美女 | 麻豆视频在线观看免费 | 最新中文字幕在线观看视频 | 99久久精品国产系列 | 国产午夜精品一区二区三区在线观看 | 免费人成网 | 成人久久毛片 | 9999国产精品 | 一级久久久 | www.综合网.com | 亚洲欧美日韩国产一区二区三区 | 欧美-第1页-屁屁影院 | 国产精品麻| 91av资源网 | 激情网第四色 | 亚洲最新视频在线 | 国产精品久久久久久久免费大片 | 午夜影视av | 99视频一区二区 | 亚洲免费a| 久久99精品国产一区二区三区 | 日本中文字幕视频 | 色在线视频 | 91精品视频在线观看免费 | 久久久久国产一区二区三区四区 | 午夜视频一区二区三区 | 天天综合网久久 | 精品国产精品一区二区夜夜嗨 | 久久久免费精品视频 | 手机av在线不卡 | 日韩在线播放欧美字幕 | 亚洲成人av在线电影 | 狠狠狠色丁香综合久久天下网 | 91久久爱热色涩涩 | 日韩久久久久久久久 | 日韩精品不卡在线观看 | 久久综合之合合综合久久 | 久久男人中文字幕资源站 | 中国一区二区视频 | 91污在线观看 | 国产精品日韩精品 | 九九九九九精品 | 国产一级片一区二区三区 | www亚洲国产 | 高清精品在线 | 亚洲成a人片综合在线 | 欧美日韩超碰 | 日本久久久精品视频 | 天天草天天摸 | 中文字幕91在线 | 免费无遮挡动漫网站 | 亚洲精品一区二区精华 | 国产一区二区在线精品 | 国产在线观看免费av | 在线看国产视频 | 成人影音在线 | 免费久久网 | 日韩女同一区二区三区在线观看 | 久久tv视频 | 日韩欧美高清一区二区三区 | 狠狠操狠狠干天天操 | 久久久久免费 | 亚洲午夜久久久久久久久电影网 | 亚洲影视资源 | 美女国产精品 | 国产在线色视频 | 国产精品久久久久国产精品日日 | 国内外激情视频 | 国产精品99久久久精品免费观看 | 午夜资源站 | 亚州欧美精品 | 日本丰满少妇免费一区 | 99婷婷狠狠成为人免费视频 | 国产精在线| 久久99久久99精品免观看软件 | 日本夜夜草视频网站 | 99精品欧美一区二区 | 久久免费视频精品 | 亚洲人在线7777777精品 | 成人黄色短片 | 亚洲精品97| 中文字幕丝袜一区二区 | 丰满少妇在线观看 | 中文字幕色在线视频 | 天海冀一区二区三区 | 成人黄色毛片视频 | 黄色小视频在线观看免费 | 九九热在线观看 | 中文字幕色网站 | 国产精品综合久久久 | 激情久久小说 | 亚洲欧洲精品一区二区精品久久久 | 黄色三级在线观看 | 欧美精品三级 | 国产日韩欧美视频在线观看 | 91女子私密保健养生少妇 | 久久人人爽人人爽人人片av免费 | 在线看av的网址 | 91久久国产自产拍夜夜嗨 | 久久精品久久99 | 人人草人人草 | 五月婷在线 | 日韩动漫免费观看高清完整版在线观看 | 亚洲视频大全 | 精品久久毛片 | 日本在线观看中文字幕 | 日韩av一区二区三区在线观看 | 激情久久久久久久久久久久久久久久 | 在线免费观看黄 | 国产精品日韩精品 | 91成人免费视频 | 在线免费日韩 | 99视| 五月天激情视频 | 亚洲理论在线观看 | 人人艹人人 | 337p日本欧洲亚洲大胆裸体艺术 | 久久精品99国产国产精 | 美女精品在线 | 亚洲日本一区二区在线 | 国产黄色免费看 | 97人人澡人人爽人人模亚洲 | 91试看| 91九色最新 | 超碰97中文 | 国产精品1000 | 中文字幕一区二区在线播放 | 在线91色| 超碰97国产在线 | 欧美国产日韩一区 | 久久久免费观看 | 欧美精品成人在线 | 天天草天天草 | 91麻豆精品国产91久久久无限制版 | 一区二区国产精品 | 五月开心婷婷 | 久久久精品福利视频 | 久久96国产精品久久99漫画 | 成人一级| 成人免费在线视频 | 久草电影在线观看 | 成人av网址大全 | 色婷婷丁香 | 日韩av一区二区在线播放 | 亚洲视频99| 99热在线精品观看 | 麻豆传媒在线视频 | 视频二区 | 在线免费观看国产视频 | 国产高清av在线播放 | 日韩色视频在线观看 | 91av蜜桃| 99精品欧美一区二区三区 | 亚洲成a人片在线观看网站口工 | 久久精品福利视频 | 国产亚洲成av人片在线观看桃 | 国产精品女教师 | 能在线看的av | 日韩乱理 | 国产精品中文字幕在线观看 | 国产午夜精品一区二区三区 | 特级a毛片 | 久久九九久久精品 | 久久精品亚洲精品国产欧美 | 日韩电影精品 | 天天摸天天舔天天操 | 日韩欧美观看 | 视频国产 | 欧美精品午夜 | a黄色片| 欧美成人手机版 | 久久久午夜精品福利内容 | 黄色av成人在线 | 亚洲国产中文在线观看 | 国产成人精品在线观看 | 欧美巨大 | 久久免费视频4 | 亚洲精品五月天 | 亚洲 欧洲av | 精品久久久影院 | 国产又粗又猛又黄又爽视频 | 久久精品国产第一区二区三区 | 国产精品11 | 欧美中文字幕久久 | 九九导航 | 香蕉色综合 | 911久久香蕉国产线看观看 | www.国产在线观看 | 久久天堂网站 | 免费黄色a网站 | 在线观看韩国av | 久久草在线免费 | 国产中文字幕第一页 | 青青河边草免费观看 | 91精品一区国产高清在线gif | 黄网站a | 亚洲三级黄色 | 亚洲狠狠婷婷综合久久久 | 青青河边草观看完整版高清 | 欧美日本国产在线观看 | 99热官网 | www黄色大片 | 麻豆91视频 | 日韩毛片久久久 | 六月婷婷色 | 在线免费精品视频 | 国产污视频在线观看 | 在线精品在线 | 国产免费资源 | 97av视频| 欧美日韩精品免费观看视频 | www成人av| 精品国产一区二区三区在线 | 激情影音| 久久激情视频免费观看 | 国产精品人人做人人爽人人添 | 毛片在线播放网址 | 国产高清 不卡 | 日韩欧美黄色网址 | 日韩专区av | 亚洲特级片 | 99高清视频有精品视频 | 99这里只有精品视频 | 成人夜晚看av | 国内精品久久久精品电影院 | 久久久久久看片 | 五月天.com | 日韩欧美电影在线 | 久草资源在线观看 | 欧美巨乳网 | 1000部国产精品成人观看 | 国产高清免费 | 日韩视频免费观看高清完整版在线 | 免费精品在线视频 | 最新亚洲视频 | 黄色一级片视频 | 91久久国产露脸精品国产闺蜜 | 日韩一区二区三免费高清在线观看 | 国产精品久久久久一区 | 免费在线观看日韩欧美 | 日韩av影视在线观看 | 在线观看成人福利 | 成人中心免费视频 | 91亚洲国产成人 | 狠狠躁日日躁狂躁夜夜躁av | 久久国产精品一区二区三区四区 | 天天插日日插 | av大片网站 | 美女网站视频色 | 久久综合久久综合九色 | 一二三区高清 | 日韩av不卡在线播放 | 久草免费在线视频 | 91人人爽久久涩噜噜噜 | 美女免费视频一区二区 | 九色激情网 | 午夜av在线播放 | 日韩电影中文字幕 | 国产日韩在线观看一区 | 综合久久久久久 | www天天干| 成人h电影 | 国内精品视频一区二区三区八戒 | 日韩在线观看网址 | 久草视频国产 | 91成人免费电影 | 丰满少妇对白在线偷拍 | 色噜噜狠狠狠狠色综合 | 亚洲春色综合另类校园电影 | 人人爱在线视频 | 中文字幕视频 | 中文字幕在线观看免费观看 | 91字幕| 国产中文字幕一区二区 | 成全免费观看视频 | 国产高清不卡一区二区三区 | 在线视频 成人 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 91精品国产91热久久久做人人 | 婷婷色中文字幕 | 欧美精品少妇xxxxx喷水 | 久久免费视频2 | www黄色com | 在线a视频免费观看 | 国产精品精品久久久久久 | 蜜桃传媒一区二区 | 在线欧美最极品的av | 久草在线这里只有精品 | 黄色亚洲片 | 久草精品视频 | 99视频精品免费观看, | 国产成人a亚洲精品 | 亚洲激精日韩激精欧美精品 | 奇米777777| 狠狠干我 | 免费aa大片| 人人澡澡人人 | 草免费视频 | 人人爽人人爽人人片av | 久久成人精品 | 日韩午夜精品 | 日韩乱码中文字幕 | 一区免费视频 | 久久国产精品一二三区 | 日韩精品视频免费在线观看 | 国产精品一区二区白浆 | 超碰在线最新地址 | 国产精品国产三级在线专区 | 在线91视频 | 亚州欧美视频 | 精品久久久久久久久久久久久久久久 | 日韩视频图片 | 中文字幕免费久久 | 99热在线国产精品 | 在线国产欧美 | 国产一区av在线 | 日日干夜夜草 | av一本久道久久波多野结衣 | 4438全国亚洲精品在线观看视频 | 国产一区二区三区黄 | 狠狠狠色丁香婷婷综合久久88 | a视频免费 | 九九热久久免费视频 | 亚洲精品综合在线 | 国产在线成人 | 福利视频| 天天精品视频 | 精品国产一区二区三区久久久 | 日本三级在线观看中文字 | 爱色婷婷 | 精品女同一区二区三区在线观看 | 国内精品久久久久久久影视简单 | 久久精品一区二区三区国产主播 | 国内精品久久久精品电影院 | 丁香婷婷综合激情 | 999久久a精品合区久久久 | 国产午夜精品av一区二区 | 国产精品18久久久久vr手机版特色 | 欧美日韩国产一二 | 激情视频一区二区三区 | 91理论片午午伦夜理片久久 | 91九色蝌蚪国产 | 999国内精品永久免费视频 | 999久久国产 | 国产在线色 | 国产精品美女久久久久久久 | 国产伦精品一区二区三区… | 国产免费成人av | 夜夜操夜夜干 | 91av色| 午夜在线观看影院 | 日韩精品一区二区免费视频 | 2023年中文无字幕文字 | a一片一级 | 欧美日韩性视频 | 99色 | 99久久精品久久久久久清纯 | 国内精品视频一区二区三区八戒 | 在线播放亚洲激情 | 亚洲黄色小说网 | 欧美一性一交一乱 | 视频在线观看亚洲 | av+在线播放在线播放 | 国产区欧美 | 亚洲欧洲视频 | 日日爽天天爽 | 九九在线国产视频 | 五月婷婷综 | 久久蜜臀一区二区三区av | 国产黄色av网站 | 国产黑丝一区二区三区 | 国产色综合天天综合网 | 免费三级黄色片 | 在线免费观看麻豆 | 五月婷丁香网 | www.91国产 | 久久久久久久久久久网 | 久久免费视屏 | 伊人永久 | 日本中文字幕一二区观 | 午夜精品一区二区国产 | 午夜视频在线观看欧美 | 97香蕉久久国产在线观看 | 黄污视频网站大全 | 特黄色大片 | 在线播放一区二区三区 | 女人高潮一级片 | 天堂av色婷婷一区二区三区 | 日韩色爱 | 久久久免费国产 | 久久激情婷婷 | 国产精品一区二区三区久久久 | 欧美老少交 | a国产精品| 日韩黄色在线电影 | 亚洲综合在线观看视频 | 日韩av影视 | 国产亚洲一区二区三区 | 最新日韩在线 | 色a资源在线 | 成年人黄色大片在线 | 免费网站看v片在线a | 欧美精彩视频在线观看 | 欧美一级片免费在线观看 | 欧美精品久久久久久久久久 | 亚洲国产一区二区精品专区 | 日韩av电影免费在线观看 | 91精品第一页 | 狠狠干五月天 | 500部大龄熟乱视频使用方法 | 中文字幕在线观看免费高清电影 | 麻豆视频www | 人人爽人人爽av | 久久99爱视频 | 草久久久久 | 亚洲一级电影视频 | 涩涩网站在线播放 | 中文字幕视频 | 久在线观看 | 天天操天天操天天操天天操天天操 | 国产精品久久久久久久久久了 | 久久免费视频精品 | 在线观看视频一区二区三区 | 久久歪歪| 亚洲乱码在线 | 日韩在线观看你懂的 | 日本精品在线看 | 亚洲精品女人久久久 | 91视频com| 欧美激情视频一区二区三区 | 亚洲一区久久 | 精品免费国产一区二区三区四区 | 99在线热播 | 人人超碰人人 | 日韩av中文字幕在线 | 久久首页| 91精品国产高清自在线观看 | 久久婷婷视频 | 亚洲精品国产精品乱码在线观看 | 中文av字幕在线观看 | 欧美黑人xxxx猛性大交 | 丁香六月婷婷开心婷婷网 | 日韩中文字幕在线看 | 在线va网站 | 91视频啊啊啊 | 亚洲精品视频第一页 | 五月婷婷久| 国产麻豆剧传媒免费观看 | 欧美精选一区二区三区 | 日本黄网站 | 成人免费视频网站在线观看 | 国产一区免费 | 久久综合影院 | 91网免费观看 | 国产一级做a爱片久久毛片a | 亚洲精品中文在线资源 | 96国产精品视频 | 国产精品麻豆三级一区视频 | 九九免费精品视频在线观看 | 最近更新好看的中文字幕 | 久久久久久久久久影视 | 国产99一区视频免费 | 欧美日韩中 | 国产亚洲精品久 | 日韩精品免费在线播放 | 啪啪小视频网站 | 欧美a√在线 | 精品久久片 | 99视频精品全国免费 | 日韩综合在线观看 | 日本久久久久久久久久久 | 在线激情av电影 | 国产尤物在线 | 国产一级h | 国产资源站 | 欧美一级日韩免费不卡 | 在线观看国产成人av片 | 欧美日韩在线网站 | 日韩在线观看一区二区三区 | 国产手机视频在线观看 | 久久久久中文 | 成人网页在线免费观看 | 国产在线a不卡 | 五月婷香 | 日韩系列| 丁香花在线视频观看免费 | 欧美日韩国产欧美 | 久草资源在线观看 | 国产一区二区视频在线 | 国产精品无av码在线观看 | 久久久国产一区二区三区四区小说 | 天天看天天干 | 在线视频欧美日韩 | 欧美精品少妇xxxxx喷水 | 九九九九热精品免费视频点播观看 | 黄色毛片在线看 | 午夜精品久久久久久久99热影院 | 99re中文字幕| 天堂网一区二区 | 91视频在线国产 | 国产精品99久久久久久人免费 | 中文字幕在线观看一区二区三区 | 成年人电影免费看 | 天天色综合三 | 国产欧美日韩精品一区二区免费 | 亚洲精品综合一二三区在线观看 | 24小时日本在线www免费的 | 久草视频在线免费 | 欧美精品久久久久久久久久白贞 | 亚洲欧美日韩国产精品一区午夜 | 黄色在线免费观看网站 |