久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Spring Security 實現短信驗證碼登錄功能

瀏覽:79日期:2023-09-05 09:49:10

之前文章都是基于用戶名密碼登錄,第六章圖形驗證碼登錄其實還是用戶名密碼登錄,只不過多了一層圖形驗證碼校驗而已;Spring Security默認提供的認證流程就是用戶名密碼登錄,整個流程都已經固定了,雖然提供了一些接口擴展,但是有些時候我們就需要有自己特殊的身份認證邏輯,比如用短信驗證碼登錄,它和用戶名密碼登錄的邏輯是不一樣的,這時候就需要重新寫一套身份認證邏輯。

開發短信驗證碼接口

獲取驗證碼

短信驗證碼的發送獲取邏輯和圖片驗證碼類似,這里直接貼出代碼。

@GetMapping('/code/sms')public void createSmsCode(HttpServletRequest request, HttpServletResponse response) throws Exception {// 創建驗證碼ValidateCode smsCode = createCodeSmsCode(request);// 將驗證碼放到session中sessionStrategy.setAttribute(new ServletWebRequest(request), SMS_CODE_SESSION_KEY, smsCode);String mobile = ServletRequestUtils.getRequiredStringParameter(request, 'mobile');// 發送驗證碼smsCodeSender.send(mobile, smsCode.getCode());}

前端代碼

<tr><td>手機號:</td><td><input type='text' name='mobile' value='13012345678'></td></tr><tr><td>短信驗證碼:</td><td><input type='text' name='smsCode'><a href='http://www.gepszalag.com/code/sms?mobile=13012345678' rel='external nofollow' >發送驗證碼</a></td></tr>

短信驗證碼流程原理

短信驗證碼登錄和用戶名密碼登錄對比

Spring Security 實現短信驗證碼登錄功能

步驟流程

首先點擊登錄應該會被SmsAuthenticationFilter過濾器處理,這個過濾器拿到請求以后會在登錄請求中拿到手機號,然后封裝成自定義的一個SmsAuthenticationToken(未認證)。 這個Token也會傳給AuthenticationManager,因為AuthenticationManager整個系統只有一個,它會檢索系統中所有的AuthenticationProvider,這時候我們要提供自己的SmsAuthenticationProvider,用它來校驗自己寫的SmsAuthenticationToken的手機號信息。 在校驗的過程中同樣會調用UserDetailsService,把手機號傳給它讓它去讀用戶信息,去判斷是否能登錄,登錄成功的話再把SmsAuthenticationToken標記為已認證。 到這里為止就是短信驗證碼的認證流程,上面的流程并沒有提到校驗驗證碼信息,其實它的驗證流程和圖形驗證碼驗證流程也是類似,同樣是在SmsAuthenticationFilter過濾器之前加一個過濾器來驗證短信驗證碼。

代碼實現

SmsCodeAuthenticationToken

作用:封裝認證Token 實現:可以繼承AbstractAuthenticationToken抽象類,該類實現了Authentication接口

public class SmsCodeAuthenticationToken extends AbstractAuthenticationToken {private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;private final Object principal;/** * 進入SmsAuthenticationFilter時,構建一個未認證的Token * * @param mobile */public SmsCodeAuthenticationToken(String mobile) {super(null);this.principal = mobile;setAuthenticated(false);}/** * 認證成功以后構建為已認證的Token * * @param principal * @param authorities */public SmsCodeAuthenticationToken(Object principal,Collection<? extends GrantedAuthority> authorities) {super(authorities);this.principal = principal;super.setAuthenticated(true);}@Overridepublic Object getCredentials() {return null;}@Overridepublic Object getPrincipal() {return this.principal;}@Overridepublic void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {if (isAuthenticated) {throw new IllegalArgumentException('Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead');}super.setAuthenticated(false);}@Overridepublic void eraseCredentials() {super.eraseCredentials();}}

SmsCodeAuthenticationFilter

作用:處理短信登錄的請求,構建Token,把請求信息設置到Token中。 實現:該類可以模仿UsernamePasswordAuthenticationFilter類,繼承AbstractAuthenticationProcessingFilter抽象類

public class SmsCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter {private String mobileParameter = 'mobile';private boolean postOnly = true; /** * 表示要處理的請求路徑 */public SmsCodeAuthenticationFilter() { super(new AntPathRequestMatcher('/authentication/mobile', 'POST'));} @Overridepublic Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)throws AuthenticationException {if (postOnly && !request.getMethod().equals('POST')) {throw new AuthenticationServiceException('Authentication method not supported: ' + request.getMethod());}String mobile = obtainMobile(request);if (mobile == null) {mobile = '';}mobile = mobile.trim();SmsCodeAuthenticationToken authRequest = new SmsCodeAuthenticationToken(mobile);// 把請求信息設到Token中setDetails(request, authRequest);return this.getAuthenticationManager().authenticate(authRequest);}/** * 獲取手機號 */protected String obtainMobile(HttpServletRequest request) {return request.getParameter(mobileParameter);}protected void setDetails(HttpServletRequest request, SmsCodeAuthenticationToken authRequest) {authRequest.setDetails(authenticationDetailsSource.buildDetails(request));}public void setMobileParameter(String usernameParameter) {Assert.hasText(usernameParameter, 'Username parameter must not be empty or null');this.mobileParameter = usernameParameter;}public void setPostOnly(boolean postOnly) {this.postOnly = postOnly;}public final String getMobileParameter() {return mobileParameter;}}

SmsAuthenticationProvider

作用:提供認證Token的校驗邏輯,配置為能夠支持SmsCodeAuthenticationToken的校驗 實現:實現AuthenticationProvider接口,實現其兩個方法。

public class SmsCodeAuthenticationProvider implements AuthenticationProvider {private UserDetailsService userDetailsService; /** * 進行身份認證的邏輯 * * @param authentication * @return * @throws AuthenticationException */@Overridepublic Authentication authenticate(Authentication authentication) throws AuthenticationException {SmsCodeAuthenticationToken authenticationToken = (SmsCodeAuthenticationToken) authentication;UserDetails user = userDetailsService.loadUserByUsername((String) authenticationToken.getPrincipal());if (user == null) {throw new InternalAuthenticationServiceException('無法獲取用戶信息');}SmsCodeAuthenticationToken authenticationResult = new SmsCodeAuthenticationToken(user, user.getAuthorities());authenticationResult.setDetails(authenticationToken.getDetails());return authenticationResult;} /** * 表示支持校驗的Token,這里是SmsCodeAuthenticationToken * * @param authentication * @return */@Overridepublic boolean supports(Class<?> authentication) {return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication);}public UserDetailsService getUserDetailsService() {return userDetailsService;}public void setUserDetailsService(UserDetailsService userDetailsService) {this.userDetailsService = userDetailsService;}}

ValidateCodeFilter

:校驗短信驗證碼 實現:和圖形驗證碼類似,繼承OncePerRequestFilter接口防止多次調用,主要就是驗證碼驗證邏輯,驗證通過則繼續下一個過濾器。

@Component('validateCodeFilter')public class ValidateCodeFilter extends OncePerRequestFilter implements InitializingBean {/** * 驗證碼校驗失敗處理器 */@Autowiredprivate AuthenticationFailureHandler authenticationFailureHandler;/** * 系統配置信息 */@Autowiredprivate SecurityProperties securityProperties;/** * 系統中的校驗碼處理器 */@Autowiredprivate ValidateCodeProcessorHolder validateCodeProcessorHolder;/** * 存放所有需要校驗驗證碼的url */private Map<String, ValidateCodeType> urlMap = new HashMap<>();/** * 驗證請求url與配置的url是否匹配的工具類 */private AntPathMatcher pathMatcher = new AntPathMatcher();/** * 初始化要攔截的url配置信息 */@Overridepublic void afterPropertiesSet() throws ServletException {super.afterPropertiesSet();urlMap.put('/authentication/mobile', ValidateCodeType.SMS);addUrlToMap(securityProperties.getCode().getSms().getUrl(), ValidateCodeType.SMS);}/** * 講系統中配置的需要校驗驗證碼的URL根據校驗的類型放入map * * @param urlString * @param type */protected void addUrlToMap(String urlString, ValidateCodeType type) {if (StringUtils.isNotBlank(urlString)) {String[] urls = StringUtils.splitByWholeSeparatorPreserveAllTokens(urlString, ',');for (String url : urls) {urlMap.put(url, type);}}}/** * 驗證短信驗證碼 * * @param request * @param response * @param chain * @throws ServletException * @throws IOException */@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws ServletException, IOException {ValidateCodeType type = getValidateCodeType(request);if (type != null) {logger.info('校驗請求(' + request.getRequestURI() + ')中的驗證碼,驗證碼類型' + type);try {// 進行驗證碼的校驗validateCodeProcessorHolder.findValidateCodeProcessor(type).validate(new ServletWebRequest(request, response));logger.info('驗證碼校驗通過');} catch (ValidateCodeException exception) {// 如果校驗拋出異常,則交給我們之前文章定義的異常處理器進行處理authenticationFailureHandler.onAuthenticationFailure(request, response, exception);return;}}// 繼續調用后邊的過濾器chain.doFilter(request, response);}/** * 獲取校驗碼的類型,如果當前請求不需要校驗,則返回null * * @param request * @return */private ValidateCodeType getValidateCodeType(HttpServletRequest request) {ValidateCodeType result = null;if (!StringUtils.equalsIgnoreCase(request.getMethod(), 'GET')) {Set<String> urls = urlMap.keySet();for (String url : urls) {if (pathMatcher.match(url, request.getRequestURI())) {result = urlMap.get(url);}}}return result;}}

添加配置

SmsCodeAuthenticationSecurityConfig

作用:配置SmsCodeAuthenticationFilter,后面需要把這些配置加到主配置類BrowserSecurityConfig

@Componentpublic class SmsCodeAuthenticationSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {@Autowiredprivate AuthenticationSuccessHandler meicloudAuthenticationSuccessHandler;@Autowiredprivate AuthenticationFailureHandler meicloudAuthenticationFailureHandler;@Autowiredprivate UserDetailsService userDetailsService;@Autowiredprivate PersistentTokenRepository persistentTokenRepository;@Overridepublic void configure(HttpSecurity http) throws Exception {SmsCodeAuthenticationFilter smsCodeAuthenticationFilter = new SmsCodeAuthenticationFilter();// 設置AuthenticationManagersmsCodeAuthenticationFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class));// 設置登錄成功處理器smsCodeAuthenticationFilter.setAuthenticationSuccessHandler(meicloudAuthenticationSuccessHandler);// 設置登錄失敗處理器smsCodeAuthenticationFilter.setAuthenticationFailureHandler(meicloudAuthenticationFailureHandler);String key = UUID.randomUUID().toString();smsCodeAuthenticationFilter.setRememberMeServices(new PersistentTokenBasedRememberMeServices(key, userDetailsService, persistentTokenRepository));SmsCodeAuthenticationProvider smsCodeAuthenticationProvider = new SmsCodeAuthenticationProvider();smsCodeAuthenticationProvider.setUserDetailsService(userDetailsService);// 將自己寫的Provider加到Provider集合里去http.authenticationProvider(smsCodeAuthenticationProvider).addFilterAfter(smsCodeAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);}}

BrowserSecurityConfig

作用:主配置類;添加短信驗證碼配置類、添加SmsCodeAuthenticationSecurityConfig配置

@Configurationpublic class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Autowiredprivate SecurityProperties securityProperties;@Autowiredprivate DataSource dataSource;@Autowiredprivate UserDetailsService userDetailsService;@Autowiredprivate AuthenticationSuccessHandler meicloudAuthenticationSuccessHandler;@Autowiredprivate AuthenticationFailureHandler meicloudAuthenticationFailureHandler;@Autowiredprivate SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;@Overrideprotected void configure(HttpSecurity http) throws Exception {// 驗證碼校驗過濾器ValidateCodeFilter validateCodeFilter = new ValidateCodeFilter();// 將驗證碼校驗過濾器加到 UsernamePasswordAuthenticationFilter 過濾器之前http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class).formLogin()// 當用戶登錄認證時默認跳轉的頁面.loginPage('/authentication/require')// 以下這行 UsernamePasswordAuthenticationFilter 會知道要處理表單的 /authentication/form 請求,而不是默認的 /login.loginProcessingUrl('/authentication/form').successHandler(meicloudAuthenticationSuccessHandler).failureHandler(meicloudAuthenticationFailureHandler)// 配置記住我功能.and().rememberMe()// 配置TokenRepository.tokenRepository(persistentTokenRepository())// 配置Token過期時間.tokenValiditySeconds(3600)// 最終拿到用戶名之后,使用UserDetailsService去做登錄.userDetailsService(userDetailsService).and().authorizeRequests()// 排除對 '/authentication/require' 和 '/meicloud-signIn.html' 的身份驗證.antMatchers('/authentication/require', securityProperties.getBrowser().getSignInPage(), '/code/*').permitAll()// 表示所有請求都需要身份驗證.anyRequest().authenticated().and().csrf().disable()// 暫時把跨站請求偽造的功能關閉掉// 相當于把smsCodeAuthenticationSecurityConfig里的配置加到上面這些配置的后面.apply(smsCodeAuthenticationSecurityConfig);}/** * 記住我功能的Token存取器配置 * * @return */@Beanpublic PersistentTokenRepository persistentTokenRepository() {JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();tokenRepository.setDataSource(dataSource);// 啟動的時候自動創建表,建表語句 JdbcTokenRepositoryImpl 已經都寫好了tokenRepository.setCreateTableOnStartup(true);return tokenRepository;}}

總結

到此這篇關于Spring Security 實現短信驗證碼登錄功能的文章就介紹到這了,更多相關spring security 驗證碼登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 一区二区三区在线播放 | 成人欧美一区二区三区白人 | 三级网站视频 | 91在线视频播放 | 在线视频亚洲 | 欧美在线视频网 | 日本久久视频 | 欧美国产一区二区 | 欧美在线a | 亚洲伊人久久网 | 国产视频精品自拍 | 久久久久久免费精品 | 日韩在线中文 | 亚洲激情一区二区 | 亚洲精品字幕 | 精品视频在线观看一区二区三区 | 精品久久99 | 国产精品成人国产乱一区 | 黄色大片网站在线观看 | 亚洲不卡视频在线 | 美女黄视频网站 | 狠狠视频| 国产成人精品久久 | 午夜免费在线 | 狠狠色综合色综合网络 | 国产在线二区 | 精品在线不卡 | 亚洲另类视频 | 狠狠艹| 亚洲www啪成人一区二区 | 精品一区二区视频 | 国产成人精品一区二区视频免费 | 欧美 日韩 国产 一区 | 欧美一区| 久草成人| 日韩精品第一页 | 日韩一区二区免费视频 | 亚洲第一国产精品 | 日韩免费在线视频 | 在线视频日韩 | 色爱av| 亚洲精品乱码久久久久久金桔影视 | 美女视频一区二区三区 | 一级a性色生活片毛片 | 在线免费毛片 | 国产三级视频 | 午夜四虎 | 国产精品一区二区在线 | 日韩视频免费看 | 久久国产精品久久久久久 | 色爱区综合五月激情 | 国外成人在线视频 | 色综合一区 | 国产成人一区 | 亚洲精品一区二三区不卡 | 欧美成人高清视频 | 亚洲一二三区在线观看 | 日韩成人在线视频 | 久久精品1区 | 欧美在线视频一区二区 | 91精产国品一二三区在线观看 | 黄色国产一级视频 | 在线观看精品视频网站 | 欧美午夜影院 | 日韩久久久久久 | 久久www免费人成看片高清 | 午夜精品成人一区二区 | 天天操一操 | 欧美一级片在线观看 | 国产午夜精品久久 | 99免费视频 | 欧美一区二区三区视频 | 91视频大全 | 一级在线观看视频 | 久久中文视频 | 久久国产精品一区 | 久久久久久久久国产成人免费 | 本道综合精品 | 欧美日韩国产精品一区二区 | 91在线资源 | 91亚洲成人 | 国产无毛 | 国产精品美女www爽爽爽动态图 | 国产成人免费视频网站高清观看视频 | 日韩精品影院 | 欧美日韩不卡合集视频 | 国产成人久久精品一区二区三区 | 日韩国产高清在线 | 二区中文字幕 | 婷婷在线视频 | 免费观看一级淫片 | 欧美日韩一区在线观看 | www.久久爱.cn | 亚洲欧洲精品成人久久奇米网 | 黄网站免费在线观看 | 99国产精品99久久久久久 | 久久国产成人 | 国产精品成人一区二区三区夜夜夜 | 国产日本韩国在线 | 精品久久久久一区二区国产 | 精品一二三区 | 国产精品日韩一区二区 | 视频一区中文字幕 | 久草热8精品视频在线观看 亚洲区在线 | 91伊人| 九色91在线| 91久久精品国产亚洲a∨麻豆 | 亚洲一区电影 | 午夜影院a | 日韩在线播放视频 | 九九福利 | 午夜剧院官方 | 男女免费在线观看视频 | 午夜av电影| 成人免费福利 | 97国产精品视频人人做人人爱 | 中文字幕在线观看一区二区三区 | 国产精品久久久久久久免费大片 | 国产精品毛片久久久久久 | 欧美黑人xx| 男人电影天堂 | 成人精品 | 久久国产精品久久久久久 | 久久99国产精一区二区三区 | 99免费观看视频 | 91资源在线 | 国产v日产∨综合v精品视频 | 免费在线视频精品 | 色吧欧美 | а_天堂中文最新版地址 | 亚洲乱码二区 | 成人精品视频 | 国产欧美亚洲精品 | 国产精品99| 久久久久国产 | 日韩在线视频在线观看 | 午夜精品网站 | 欧美精品1区2区3区 欧美视频在线一区 | 成人欧美一区二区三区色青冈 | 2018狠狠干 | 久久久久久婷婷 | 日日干日日操 | 成人美女免费网站视频 | 岛国av在线| 成年人视频免费在线看 | 福利视频一区 | 嫩呦国产一区二区三区av | 一区二区三区国产 | 毛片毛片毛片 | 午夜精品久久久久久久久久久久久 | 精品九九 | 亚洲一区精品在线 | 免费看毛片的网站 | 一区二区三区在线免费 | 好看毛片 | 色播久久| 中文字幕 国产 | 天天干,夜夜操 | 国产精品视频一区二区三区 | 国产精品久久免费看 | 麻豆产精国品免费入口 | 成人欧美一区二区三区色青冈 | 欧美成人中文字幕 | 久久99精品久久久久婷婷暖91 | 天天干 夜夜操 | 日本中文字幕电影 | 日韩a∨精品日韩在线观看 山岸逢花在线 | 午夜私人影院 | 中国毛片基地 | 一区二区三区不卡视频 | 成人av免费看| 国产在线一区二区三区 | 国产目拍亚洲精品99久久精品 | 日韩三级在线免费观看 | 日韩精品一区二区在线观看视频 | 中文字幕日韩欧美 | 人人九九精 | 国产欧美精品区一区二区三区 | 龙珠z普通话国语版在线观看 | 成人免费视频一区二区 | 热久久久 | 成人高清视频在线观看 | 亚洲精品国偷拍自产在线观看 | 国产网站视频 | 欧美亚洲国产一区 | 91cn在线观看 | 99亚洲视频| 欧美一区在线视频 | 日韩久久久久久久久久久 | 色欧美片视频在线观看 | 亚洲国产精品自拍 | 天天干狠狠干 | 777kkk999成人ww| 欧美日本韩国一区二区 | 亚洲午夜精品一区二区三区 | 国产精品美女www爽爽爽软件 | av综合在线观看 | 日韩视频国产 | 亚洲国产一区二区三区在线观看 | 国产成人精品一区二区三区四区 | 激情六月综合 | 天堂资源| 伊人精品影院 | 国产精品美女久久久久久久久久久 | 成人在线高清视频 | 欧美一区二区三区免费电影 | 欧美日韩久久久 | 一级电影在线观看 | 九一视频在线观看 | 日韩精品久久 | 不卡的一区二区 | 国产乱xxxxx97国语对白 | 国产高清自拍 | 日本免费一区二区在线观看 | 久久久国产一区二区三区四区小说 | 久久国 | 日韩一级免费在线观看 | 日韩在线小视频 | 国产精自产拍久久久久久 | 亚洲欧洲tv | 国产精品成人在线观看 | 日韩欧美不卡 | aaa在线观看| 亚洲精品一二三 | 欧美综合视频在线观看 | 一区二区三区在线观看免费 | 懂色中文一区二区在线播放 | 91麻豆产精品久久久 | 黄色片地址 | 国产精品国产精品国产 | 欧美日韩一级在线观看 | 欧美日韩久久久 | www.涩涩视频| 色婷婷久久久swag精品 | 日韩国产欧美亚洲 | 亚洲第一视频 | 欧美日韩电影一区二区三区 | 久久三区 | 中文字幕av一区二区 | 欧美日韩一区二区视频在线观看 | 亚洲综合色视频在线观看 | 国产视频精品视频 | 国产免费一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 国产精品视频在线观看 | 精品国产污网站污在线观看15 | 国产成人午夜精品影院游乐网 | 91精品综合久久久久久五月天 | 中文字幕一区二区三区四区 | 天天干天天摸 | 欧美性吧 | 亚洲精品久久久久一区二区三区 | 久久久久久久久综合 | 国产视频久久久 | www.国产精 | 日韩国产精品视频 | 久久久久久成人 | 国产成人av一区二区 | 91.成人天堂一区 | 伊人网91 | 国产日韩精品在线 | 中文字幕一区二区三区四区 | 一区二区三区视频在线观看 | 91手机精品视频 | 亚洲第一av | 亚洲精品专区 | julia一区二区三区中文字幕 | 日本一区视频在线观看 | 国产一级黄色av | 亚洲午夜精品视频 | 亚洲视频在线免费观看 | 黄色片在线免费观看 | 在线观看国产 | 龙珠z国语291集普通话 | 成年人av网站 | 极品av| 毛片网站大全 | 日韩极品在线 | 在线欧美日韩 | 国产视频网 | 自拍偷拍欧美 | 美女视频一区二区三区 | 中文字幕视频在线免费观看 | 国产老女人精品毛片久久 | 欧美激情一区二区 | 精品国产91乱码一区二区三区 | 91亚洲日本aⅴ精品一区二区 | 狠狠的日 | 亚洲精品字幕 | 在线国产视频 | 精品久久久久久亚洲精品 | a级性视频 | 国产成人一区二区三区影院在线 | 成人精品 | 日韩久久久久久 | 91九色视频| 国产人成精品一区二区三 | 精品国产乱码久久久久久丨区2区 | 欧美激情综合五月色丁香小说 | 亚洲精品一区二三区 | 亚州综合一区 | 色综合欧美 | 亚洲精选免费视频 | 成人欧美一区二区三区在线播放 | 国产视频一区二区 | 一区二区在线视频 | 四虎成人在线视频 | 久久久久国产 | 欧美日韩不卡在线 | 久久久久国产精品 | 亚洲国产精品视频 | 欧美一极片| 国产1区| 中文字幕日韩在线 | 日韩成人片| 国产精品久久久久久吹潮 | 日韩精品视频免费看 | 一区二区在线 | 精品日韩一区二区 | 成人日韩在线观看 | 一级人爱视频 | 欧美黑人狂躁日本寡妇 | 91超碰在线观看 | 成人高清在线 | 91精品久久久久久久久久入口 | 欧美激情在线播放 | 97国产在线 | 日韩综合一区 | 亚洲人成人一区二区在线观看 | 成人精品久久久 | 国产精品久久久99 | 成人av一区二区三区 | 精品国产一区二区三区久久久蜜月 | 久久九 | 亚洲国产成人在线 | 99在线观看| 最新国产精品精品视频 | 天天夜夜操操 | 午夜视频在线观看网站 | 不卡日韩在线 | 国产伦精品久久久一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 亚洲一区二区在线 | 亚洲蜜臀av乱码久久精品蜜桃 | 日韩免费一区 | 在线久草 | 免费看h | 一区二区三区免费 | 亚洲精品乱码久久久久久蜜桃图片 | 青青草视频网站 | 国产最好的精华液网站 | 日本三级一区二区 | 免费观看的黄色 | 99爱视频| 高清国产午夜精品久久久久久 | 国产精彩视频 | 亚洲午夜精品一区二区三区 | 国产日韩欧美视频 | 久久草视频 | 自拍视频在线播放 | 久久九九国产精品 | 日韩一区二区三区在线观看 | 国产精品久久久久久久久久 | 日韩午夜免费视频 | 久久亚洲精品视频 | 伊人网在线视频观看 | 黄色a视频 | 一区二区三区精品 | 日韩欧美成人影院 | 成人小视频在线观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 成人在线不卡 | www精品美女久久久tv | 欧美色综合一区二区三区 | 97免费在线观看视频 | 性一级录像片片视频免费看 | 日韩福利在线 | 亚洲 欧美 综合 | 国产不卡一二三区 | 久久网日本 | 国产视频一区二区 | 色婷婷网 | 国产丝袜一区二区三区免费视频 | 激情久久av一区av二区av三区 | 成人在线免费小视频 | 国产成人一区二区 | 日韩在线不卡视频 | 国产a久久精品一区二区三区 | 国产精品久久久久久久久久久久冷 | 亚洲精品国偷拍自产在线观看 | 日韩精品一区二区三区视频播放 | 久久精品综合 | 日韩福利视频 | 亚洲精品视频在线播放 | 久久久av | 久久久久久国产精品 | 成人免费一区二区三区视频网站 | 操操操操操操 | 99精品久久久久久久免费看蜜月 | 亚洲精品自在在线观看 | 国产一区www| 伊人青青久 | 国产毛片毛片 | 欧美色综合一区二区三区 | 欧美a在线 | 久久综合入口 | 精品国产影院 | 久久婷婷色 | 国产免费观看一区二区三区 | 欧美6一10sex性hd | 在线精品亚洲欧美日韩国产 | 亚洲狠狠爱一区二区三区 | 亚洲成人免费在线 | 精品久久久久久久久久久久 | 精品国产福利 | 午夜免费福利电影 | 中文字幕精品三级久久久 | 免费h在线观看 | 色吟av| 日韩一区二区福利 | 欧美综合婷婷 | av高清在线看| av中文字幕在线播放 | 在线国产专区 | 亚洲精品一区 | 亚洲视频一区在线 | 免费av电影网站 | 33eee在线视频免费观看 | 在线中文字幕视频 | 天天艹久久 | 日韩视频在线观看中文字幕 | 日韩三级中文字幕 | 天天综合7799精品影视 | ririsao久久精品一区 | 欧美日韩国产在线播放 | 欧美久久久久久久久久久久 | 国产片av | 亚洲人成人一区二区在线观看 | 国产精品久久久久久久久久东京 | 综合色综合 | 国产色在线 | 美女一区 | 国产精品夜夜 | 欧美视频精品在线 | 日韩精品久 | www久久久 | 99这里只有精品视频 | 天堂资源 | 日本黄色大片免费 | 四虎影院最新地址 | 99国产精品一区 | 精品国产欧美一区二区三区成人 | 精品www| 日韩成人在线视频 | 亚洲精品乱码久久久久久蜜桃91 | 国产一级片在线播放 | 国产精品久久一区二区三区 | 成人福利在线 | 91.成人天堂一区 | 一级二级在线观看 | 一级电影免费在线观看 | 免费不卡视频 | 亚洲成a人v欧美综合天堂麻豆 | www.日韩av.com | 欧美涩涩网 | 成人午夜视频在线观看 | 午夜小电影 | 97av在线 | 欧美成人免费在线视频 | 免费的av网站 | 欧美一区亚洲二区 | 中文字幕在线第二页 | 亚洲色域网| 三级av网站 | 天天干国产 | 成人做爰69片免费 | 国产一级一级国产 | 亚洲欧美日韩天堂 | 中文字幕高清在线 | 欧美日韩在线观看一区二区三区 | 欧美午夜精品久久久久久人妖 | 视频一区在线 | 亚洲视频在线视频 | 精品久久久久久久久久久久久久 | 综合视频一区二区三区 | 久久久久久精 | 中文字幕一区二区三区四区 | 国产在线精品一区 | 在线天堂视频 | 国内精品久久久久国产 | 一区二区三区高清不卡 | www国产亚洲精品久久网站 | 久久综合一区二区 | 综合色久| 成年视频在线观看福利资源 | 中文字幕在线视频一区 | 国产一区二区综合 | 一区二区免费在线观看 | 男女羞羞网站 | 国产高清精品一区二区三区 | 成人性大片免费观看网站 | 婷婷激情五月 | 探花在线观看 | 免费在线成人 | 日韩中文字幕在线免费 | 国产精品二区三区 | 夜夜草 | 成人av网页 | 少妇黄色一级片 | 午夜精品久久久久久久久 | jizz国产免费 | 亚洲 中文 欧美 日韩 在线观看 | 久久久www成人免费精品 | 国产精品一区二区三区在线 | 欧美午夜精品久久久久久蜜 | 国产福利在线观看视频 | 色性av| 国产日韩亚洲欧美 | 日本综合色 | 欧美一级在线观看 | 美女黄网站视频免费 | 狠狠久久伊人中文字幕 | 国偷自产av一区二区三区 | 亚洲视频自拍 | 成人一区二区三区在线观看 | 伊人免费网 | 丁香在线| 国产成人精品一区二区三区四区 | 亚洲影视一区二区 | 亚洲首页 | 午夜精品视频在线观看 | 亚洲免费不卡视频 | 日韩精品一区二区三区中文在线 | 日韩一区二区三区在线观看 | 日本在线观看www | 中文字幕在线资源 | 91精品久久久久久久久久入口 | 亚洲欧洲无码一区二区三区 | 亚洲一一在线 | 国产成人精品久久二区二区91 | 日韩视频一区二区 | 91视频国产网站 | 97视频在线 | 久久免费精品 | 日本在线免费看 | 日韩艹逼视频 | 色黄视频在线看 | 免费观看在线午夜影视 | 国产高清av在线一区二区三区 | 国产精品高清在线 | 国产超碰人人爽人人做人人爱 | 久久久久久久久久毛片 | 国产91视频在线观看 | 麻豆精品久久 | 中文字幕av网 | 大香伊在人线免97 | 国产精品久久av | 操操操av| 永久av| 国产欧美日韩 | 99re6热在线精品视频播放 | 日韩一区二区三区福利视频 | 一级毛片免费观看 | 国产91网址 | 欧美一级免费 | 精品国产三级 | 精品一区二区三 | 狠狠操夜夜操天天操 | 精品国产一区二区三区久久久蜜月 | 亚洲精品国精品久久99热 | 蜜桃av在线播放 | 国产一级免费视频 | 天天操天天干天天干 | 男女黄色免费网站 | 天天操天天碰 | 久产久精品 | 日韩欧美视频一区二区三区 | 91日日夜夜 | 亚洲欧美91 | 国产精品日韩专区 | 日韩欧美一区二区三区免费观看 | 亚洲青涩在线 | 一区二区三区四区在线 | wwwjizz日本| 亚洲天堂一区 | 好看的一级毛片 | 99re视频| 91免费观看国产 | 欧美成人免费在线视频 | 玖玖精品在线 | 天堂va在线高清一区 | 国产日韩欧美精品一区二区三区 | 夜夜操导航 | 精品伊人久久 | 手机看片369 | 久久国产精品免费一区二区三区 | 中文字幕观看 | 国产综合视频 | 美日韩免费视频 | 成人高清视频在线 | 99精品全国免费观看视频软件 | 欧美成年黄网站色视频 | 免费av一区二区三区 | 欧美精品1区2区3区 国产女无套免费网站 | 国产中文字幕在线 | www.亚洲一区 | 黄色地址| 日韩国产| 欧美一区二区免费 | 亚洲国产精品人人爽夜夜爽 | 国产日韩欧美在线 | 成人一区电影 | 操操操av| 天天摸天天摸 | 久久久精品久久久久久 |