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

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

SpringBoot之HandlerInterceptor攔截器的使用詳解

瀏覽:88日期:2023-04-14 09:14:31

前言

平常項目開發過程中,會遇到登錄攔截,權限校驗,參數處理,防重復提交等問題,那攔截器就能幫我們統一處理這些問題。

一、實現方式

1.1 自定義攔截器

自定義攔截器,即攔截器的實現類,一般有兩種自定義方式:

定義一個類,實現org.springframework.web.servlet.HandlerInterceptor接口。

定義一個類,繼承已實現了HandlerInterceptor接口的類,例如org.springframework.web.servlet.handler.HandlerInterceptorAdapter抽象類。

1.2 添加Interceptor攔截器到WebMvcConfigurer配置器中

自定義配置器,然后實現WebMvcConfigurer配置器。

以前一般繼承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter類,不過SrpingBoot 2.0以上WebMvcConfigurerAdapter類就過時了。有以下2中替代方法:

直接實現org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。(推薦)

繼承org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport類。但是繼承WebMvcConfigurationSupport會讓SpringBoot對mvc的自動配置失效。不過目前大多數項目是前后端分離,并沒有對靜態資源有自動配置的需求,所以繼承WebMvcConfigurationSupport也未嘗不可。

二、HandlerInterceptor 方法介紹

preHandle:預處理,在業務處理器處理請求之前被調用,可以進行登錄攔截,編碼處理、安全控制、權限校驗等處理;

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}

postHandle:后處理,在業務處理器處理請求執行完成后,生成視圖之前被調用。即調用了Service并返回ModelAndView,但未進行頁面渲染,可以修改ModelAndView,這個比較少用。

default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable ModelAndView modelAndView) throws Exception {}

afterCompletion:返回處理,在DispatcherServlet完全處理完請求后被調用,可用于清理資源等。已經渲染了頁面。

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable Exception ex) throws Exception {}

三、攔截器(Interceptor)實現

3.1 實現HandlerInterceptor

此攔截器演示了通過注解形式,對用戶權限進行攔截校驗。

package com.nobody.interceptor;import com.nobody.annotation.UserAuthenticate;import com.nobody.context.UserContext;import com.nobody.context.UserContextManager;import com.nobody.exception.RestAPIError;import com.nobody.exception.RestException;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @Description * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Slf4j@Componentpublic class UserPermissionInterceptor implements HandlerInterceptor { private UserContextManager userContextManager; @Autowired public void setContextManager(UserContextManager userContextManager) { this.userContextManager = userContextManager; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { log.info('>>> UserPermissionInterceptor preHandle -- '); if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; // 獲取用戶權限校驗注解(優先獲取方法,無則再從類獲取) UserAuthenticate userAuthenticate = handlerMethod.getMethod().getAnnotation(UserAuthenticate.class); if (null == userAuthenticate) {userAuthenticate = handlerMethod.getMethod().getDeclaringClass() .getAnnotation(UserAuthenticate.class); } if (userAuthenticate != null && userAuthenticate.permission()) {// 獲取用戶信息UserContext userContext = userContextManager.getUserContext(request);// 權限校驗if (userAuthenticate.type() != userContext.getType()) { // 如若不拋出異常,也可返回false throw new RestException(RestAPIError.AUTH_ERROR);} } } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { log.info('>>> UserPermissionInterceptor postHandle -- '); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { log.info('>>> UserPermissionInterceptor afterCompletion -- '); }}

3.2 繼承HandlerInterceptorAdapter

package com.nobody.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;/** * @Description * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Slf4j@Componentpublic class UserPermissionInterceptorAdapter extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { log.info('>>> UserPermissionInterceptorAdapter preHandle -- '); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { log.info('>>> UserPermissionInterceptorAdapter postHandle -- '); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { log.info('>>> UserPermissionInterceptorAdapter afterCompletion -- '); }}

四、配置器(WebMvcConfigurer)實現

4.1 實現WebMvcConfigurer(推薦)

package com.nobody.config;import com.nobody.context.UserContextResolver;import com.nobody.interceptor.UserPermissionInterceptor;import com.nobody.interceptor.UserPermissionInterceptorAdapter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.method.support.HandlerMethodArgumentResolver;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.List;/** * @Description * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Configurationpublic class WebAppConfigurer implements WebMvcConfigurer { private UserPermissionInterceptor userPermissionInterceptor; private UserPermissionInterceptorAdapter userPermissionInterceptorAdapter; private UserContextResolver userContextResolver; @Autowired public void setUserPermissionInterceptor(UserPermissionInterceptor userPermissionInterceptor) { this.userPermissionInterceptor = userPermissionInterceptor; } @Autowired public void setUserPermissionInterceptorAdapter( UserPermissionInterceptorAdapter userPermissionInterceptorAdapter) { this.userPermissionInterceptorAdapter = userPermissionInterceptorAdapter; } @Autowired public void setUserContextResolver(UserContextResolver userContextResolver) { this.userContextResolver = userContextResolver; } @Override public void addInterceptors(InterceptorRegistry registry) { // 可以添加多個攔截器,一般只添加一個 // addPathPatterns('/**') 表示對所有請求都攔截 // .excludePathPatterns('/base/index') 表示排除對/base/index請求的攔截 // 多個攔截器可以設置order順序,值越小,preHandle越先執行,postHandle和afterCompletion越后執行 // order默認的值是0,如果只添加一個攔截器,可以不顯示設置order的值 registry.addInterceptor(userPermissionInterceptor).addPathPatterns('/**').excludePathPatterns('/base/index').order(0); // registry.addInterceptor(userPermissionInterceptorAdapter).addPathPatterns('/**') // .excludePathPatterns('/base/index').order(1); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(userContextResolver); }}

4.2 繼承WebMvcConfigurationSupport

package com.nobody.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import com.nobody.interceptor.UserPermissionInterceptor;import com.nobody.interceptor.UserPermissionInterceptorAdapter;/** * @Description * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Configurationpublic class WebAppConfigurerSupport extends WebMvcConfigurationSupport { @Autowired private UserPermissionInterceptor userPermissionInterceptor; // @Autowired // private UserPermissionInterceptorAdapter userPermissionInterceptorAdapter; @Override public void addInterceptors(InterceptorRegistry registry) { // 可以添加多個攔截器,一般只添加一個 // addPathPatterns('/**') 表示對所有請求都攔截 // .excludePathPatterns('/base/index') 表示排除對/base/index請求的攔截 registry.addInterceptor(userPermissionInterceptor).addPathPatterns('/**').excludePathPatterns('/base/index'); // registry.addInterceptor(userPermissionInterceptorAdapter).addPathPatterns('/**') // .excludePathPatterns('/base/index'); }}

五、其他主要輔助類

5.1 用戶上下文類

package com.nobody.context;import com.nobody.enums.AuthenticationTypeEnum;import lombok.Getter;import lombok.Setter;import lombok.ToString;/** * @Description 用戶上下文 * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Getter@Setter@ToStringpublic class UserContext { // 用戶名稱 private String name; // 用戶ID private String userId; // 用戶類型 private AuthenticationTypeEnum type;}

5.2 校驗訪問權限注解

package com.nobody.context;import com.nobody.enums.AuthenticationTypeEnum;import lombok.Getter;import lombok.Setter;import lombok.ToString;/** * @Description 用戶上下文 * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Getter@Setter@ToStringpublic class UserContext { // 用戶名稱 private String name; // 用戶ID private String userId; // 用戶類型 private AuthenticationTypeEnum type;}

5.3 用戶上下文操作類

package com.nobody.context;import com.nobody.enums.AuthenticationTypeEnum;import com.nobody.exception.RestAPIError;import com.nobody.exception.RestException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Objects;import java.util.UUID;/** * @Description 用戶上下文操作類 * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Componentpublic class UserContextManager { private static final String COOKIE_KEY = '__userToken'; // @Autowired // private RedisService redisService; /** * 獲取用戶上下文信息 * * @param request * @return */ public UserContext getUserContext(HttpServletRequest request) { String userToken = getUserToken(request, COOKIE_KEY); if (!StringUtils.isEmpty(userToken)) { // 從緩存或者第三方獲取用戶信息 // String userContextStr = redisService.getString(userToken); // if (!StringUtils.isEmpty(userContextStr)) { // return JSON.parseObject(userContextStr, UserContext.class); // } // 因為演示,沒集成Redis,故簡單new對象 UserContext userContext = new UserContext(); userContext.setName('Mr.nobody'); userContext.setUserId('0000001'); userContext.setType(AuthenticationTypeEnum.ADMIN); return userContext; } throw new RestException(RestAPIError.AUTH_ERROR); } public String getUserToken(HttpServletRequest request, String cookieKey) { Cookie[] cookies = request.getCookies(); if (null != cookies) { for (Cookie cookie : cookies) {if (Objects.equals(cookie.getName(), cookieKey)) { return cookie.getValue();} } } return null; } /** * 保存用戶上下文信息 * * @param response * @param userContextStr */ public void saveUserContext(HttpServletResponse response, String userContextStr) { // 用戶token實際根據自己業務進行生成,此處簡單用UUID String userToken = UUID.randomUUID().toString(); // 設置cookie Cookie cookie = new Cookie(COOKIE_KEY, userToken); cookie.setPath('/'); response.addCookie(cookie); // redis緩存 // redisService.setString(userToken, userContextStr, 3600); }}

5.4 方法參數解析器類

package com.nobody.context;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.MethodParameter;import org.springframework.stereotype.Component;import org.springframework.web.bind.support.WebDataBinderFactory;import org.springframework.web.context.request.NativeWebRequest;import org.springframework.web.method.support.HandlerMethodArgumentResolver;import org.springframework.web.method.support.ModelAndViewContainer;import javax.servlet.http.HttpServletRequest;/** * @Description 對有UserContext參數的接口,進行攔截注入用戶信息 * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@Component@Slf4jpublic class UserContextResolver implements HandlerMethodArgumentResolver { @Autowired private UserContextManager userContextManager; @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { log.info('>>> resolveArgument -- begin...'); HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); // 從緩存獲取用戶信息賦值到接口參數中 return userContextManager.getUserContext(request); } /** * 只對UserContext參數進行攔截賦值 * * @param methodParameter * @return */ @Override public boolean supportsParameter(MethodParameter methodParameter) { if (methodParameter.getParameterType().equals(UserContext.class)) { return true; } return false; }}

六、測試驗證

package com.nobody.controller;import com.alibaba.fastjson.JSON;import com.nobody.annotation.UserAuthenticate;import com.nobody.context.UserContext;import com.nobody.context.UserContextManager;import com.nobody.enums.AuthenticationTypeEnum;import com.nobody.pojo.model.GeneralResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;/** * @Description * @Author Mr.nobody * @Date 2020/10/25 * @Version 1.0 */@RestController@RequestMapping('user')public class UserController { @Autowired private UserContextManager userContextManager; @GetMapping('login') public GeneralResult<UserContext> doLogin(HttpServletResponse response) { UserContext userContext = new UserContext(); userContext.setUserId('0000001'); userContext.setName('Mr.nobody'); userContext.setType(AuthenticationTypeEnum.ADMIN); userContextManager.saveUserContext(response, JSON.toJSONString(userContext)); return GeneralResult.genSuccessResult(userContext); } @GetMapping('personal') @UserAuthenticate(permission = true, type = AuthenticationTypeEnum.ADMIN) public GeneralResult<UserContext> getPersonInfo(UserContext userContext) { return GeneralResult.genSuccessResult(userContext); }}

啟動服務后,在瀏覽器先調用personal接口,因為沒有登錄,所以會報錯沒有權限:

SpringBoot之HandlerInterceptor攔截器的使用詳解

控制臺輸出:

SpringBoot之HandlerInterceptor攔截器的使用詳解

啟動服務后,在瀏覽器先訪問login接口進行登錄,再訪問personal接口,驗證通過,正確返回用戶信息:

SpringBoot之HandlerInterceptor攔截器的使用詳解

SpringBoot之HandlerInterceptor攔截器的使用詳解

七、Github項目

項目工程可從Github獲取,https://github.com/LucioChn/springboot-common.git

到此這篇關于SpringBoot之HandlerInterceptor攔截器的使用詳解的文章就介紹到這了,更多相關SpringBoot HandlerInterceptor攔截器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 狠狠人人| 国产精品久久久久一区二区三区 | 在线国产欧美 | 欧美日韩高清 | 99久久免费视频在线观看 | 久久久久久久一区 | 色女人av | 欧美色视频在线观看 | 91精品国产91久久久久游泳池 | 久久国产精品视频一区 | 自拍视频在线观看 | 国产一区高清 | 精品96久久久久久中文字幕无 | 欧美电影一区 | av免费网| 不卡免费在线视频 | 精品成人国产 | 正在播放国产一区 | 成人三级视频网站 | 可以在线观看的av网站 | 97超碰在线播放 | 欧美精品区 | 欧美久久精品一级c片 | 第一色综合| 亚洲高清在线观看 | 久久这里只有国产精品 | 亚洲精品一区在线观看 | 精品日韩一区二区三区 | 99视频免费播放 | 91精品一区二区三区久久久久久 | 国产成人影院在线观看 | 日韩精品一区二区三区在线 | 欧美激情视频一区二区三区在线播放 | 国产精品有限公司 | 真人一级毛片 | 青草青草久热精品视频在线观看 | www.99久久久 | 欧美日韩精品一区 | 亚洲精品乱码久久久久久蜜桃 | 国产看片网站 | 在线a电影| 欧美自拍视频一区 | 欧美日韩视频在线第一区 | 成人免费在线电影 | 日本一区二区高清不卡 | 亚洲国产精品久久人人爱 | 天天操天天干天天干 | 成人欧美在线视频 | 亚洲成人中文字幕 | 久久草 | 在线播放国产视频 | 亚洲狠狠爱一区二区三区 | 久久亚洲综合 | a视频在线免费观看 | 国产成人精品综合 | 成年无码av片在线 | 亚洲成人久久久 | 日本欧美在线 | 在线视频亚洲 | 亚洲色图88| 久久av一区二区三区亚洲 | 亚洲福利小视频 | 欧美日韩一区二区在线播放 | 日韩成人中文字幕 | jizz18国产| 91精品一区二区三区久久久久久 | 在线日韩中文字幕 | 亚洲精选久久 | 成人国产精品久久 | 欧美精品欧美激情 | 亚洲成人久久久 | 国产日韩欧美视频 | 国产传媒日韩欧美 | 99精品网站 | 午夜精品久久久久久久久久久久久 | 成人在线网 | 91av导航 | 免费成人高清 | 一区二区三区在线视频播放 | 亚洲综合色视频在线观看 | 天天草天天干 | 狠狠爱天天操 | 亚洲精品一区二区三区麻豆 | 免费一级片 | 一区二区三区日本 | 国产农村妇女精品一二区 | 欧美精品一区二区三区一线天视频 | 日韩一区二区三区四区五区 | 国产精品网站在线观看 | 伊人欧美在线 | 精品毛片 | 日韩精品一区在线 | 中文字幕av第一页 | 亚洲中字幕| 精品久久久久久久久久久 | 色橹橹欧美在线观看视频高清 | 精品亚洲一区二区三区在线观看 | 午夜影院男女 | 天天草夜夜 | 日韩午夜免费 | 人人草视频在线观看 | 精品国产91亚洲一区二区三区www | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品一区二区三区在线免费观看 | 国产精品日产欧美久久久久 | 亚洲精品一区二区三区在线 | 欧美日韩不卡合集视频 | 久久国产精品一区 | 亚洲精品久久久久久久久久久 | 中文字幕一区二区三区四区 | 青青草久久 | 99久久99热这里只有精品 | 久久久一区二区 | 午夜欧美 | 大香一网 | 成人a在线视频免费观看 | 午夜精品久久久久久久久 | 中文字幕丝袜 | 91国内视频在线观看 | 精品国产三级 | 日本一级毛片免费看 | 国产精品久久久久久久天堂 | 99视频网站 | 一本一本久久a久久精品综合妖精 | 色婷婷综合在线视频 | 免费在线一区二区三区 | 97碰碰碰 | 99久久99久久精品国产片果冻 | 亚洲国产精品一区二区第一页 | 在线看一级片 | 一级片在线免费看 | 狠狠干天天干 | 国产在线拍揄自揄拍视频 | 国产一区二区三区免费看 | 午夜免费 | www.麻豆av | 在线观看第一页 | 九九只有精品 | 夜夜爽99久久国产综合精品女不卡 | 国产成人福利在线观看 | 国产精品久久一区二区三区 | 特级理论片 | 亚洲国产精品一区二区久久 | 国产精品成人免费视频 | 国产中文字幕一区二区三区 | 久久久91精品国产一区二区精品 | 国产精品久久久久久久一区探花 | 一区二区网站 | 99爱免费视频 | 中文字幕日韩欧美 | 在线视频一区二区 | 欧美日韩亚洲国产综合 | 欧美一级二级三级视频 | 日韩a在线 | 日韩小视频 | 亚洲国产成人在线 | 国产精品久久久久久久久久久久 | 国产精品久久久久久二区 | 免费在线观看一区二区 | 91中文字幕网 | 伊人电影综合 | 99久久视频| 欧美精品91 | 久久久久久久久国产 | 在线免费av观看 | 狠狠色综合色综合网络 | 中文字幕在线观看 | 美女二区| 97精品超碰一区二区三区 | 97超碰自拍| av网站免费 | 亚洲国产成人av好男人在线观看 | 欧美精品二区 | 黄毛片网站| 欧美成人免费在线视频 | 黑人精品xxx一区一二区 | 成人一区二区三区在线 | 美女久久久久 | 亚洲精品一 | 国产小视频在线看 | 亚洲免费观看视频 | 欧美日韩一区二区三区在线观看 | 色综合天天综合网国产成人网 | 91精品综合久久久久久五月天 | 国产精品不卡一区 | 久久久91 | 日本精品一区二区在线观看 | 色综合一区 | 色天天综合久久久久综合片 | 亚洲成人看片 | 欧美日本精品 | 麻豆沈芯语在线观看 | 久久国产精品久久久久久 | 97人人爱 | 精品国产91亚洲一区二区三区www | 亚洲在线视频 | 日韩在线精品 | 久久精品一区二区三区四区 | 亚洲精品在线看 | 欧美在线| 精品一区二区三区免费毛片 | 国产精品久久精品 | 成人a网 | 欧美黄色a视频 | 一本一道久久a久久精品逆3p | 亚洲精品免费视频 | 国产成人久久 | av三级在线免费观看 | 欧美激情视频一区二区三区在线播放 | 一区二区三区视频 | 久久天堂av综合合色蜜桃网 | 91精品一区二区三区久久久久久 | 日韩中文字幕 | 午夜私人影院 | 日韩在线免费 | 麻豆精品久久 | 羞羞视频免费观看入口 | 成人国产精品久久 | 在线播放国产一区二区三区 | 欧美嘿咻 | 日韩精品一区在线视频 | 伊人二区 | 欧日韩不卡在线视频 | 亚洲 激情 在线 | 在线视频a | 嫩草成人影院 | 国产视频福利在线观看 | 国内自拍视频在线观看 | 老妇激情毛片免费 | 日韩精品一区在线视频 | 1000部羞羞视频在线看视频 | 婷婷久久五月 | 日韩在线播放一区 | 日本免费视频 | 99久久婷婷国产综合精品电影 | 成人亚洲网 | a毛片在线免费观看 | 成人免费一区二区三区视频网站 | 久久久久国产精品www | 激情综合五月 | av午夜电影 | 国产精品一区二区三区在线 | 国产精品久久婷婷六月丁香 | 先锋影音在线 | 久久综合中文字幕 | 国产一区二区在线免费观看 | 91社区在线高清 | 91av在线播放 | 亚洲毛片| 久久99久久99精品免观看粉嫩 | 99热首页 | 成人精品国产 | 91精品久久久久久综合五月天 | 最新高清无码专区 | 国产一区二区精品丝袜 | 欧美激情视频久久 | 在线观看免费视频a | 国产精品18久久久久久首页狼 | 欧美日韩一区二区不卡 | 毛片91| 国产福利一区二区三区四区 | 男女做爰高清无遮挡免费视频 | 在线观看一区 | 精品久久香蕉国产线看观看亚洲 | 欧美一级二级视频 | 麻豆资源| 久久国产精品99久久久久久老狼 | 亚洲精品久久久 | 国产精品日韩欧美一区二区三区 | 国产精品视频免费 | 天天艹逼 | 国产精品91视频 | 精品国产91亚洲一区二区三区www | 亚洲二区在线视频 | 欧美亚洲视频 | 久久青青 | 精品免费国产一区二区三区 | 亚洲高清在线观看 | 午夜影剧院| 国产精品.xx视频.xxtv | 亚洲一区电影 | 白浆在线 | 亚洲一区二区三区高清 | 久久一| 久久国产精品一区二区 | 久久精品欧美一区二区三区不卡 | 91最新 | 亚洲成年| 伊人网亚洲 | 国产美女精品 | av网站观看| 欧美国产一区二区三区 | 视频一区 国产精品 | 美女福利网站 | 玖玖精品 | 国内精品久久精品 | 欧美日韩一区二区三区四区 | 一级片在线观看 | 欧美精品一区二区三区四区在线 | 天天干天天干天天干天天射 | 久草久 | 午夜大片在线观看 | 在线观看中文字幕 | 一级日批片 | 日韩网站免费观看 | 免费观看的av | 99热首页| 日韩一区二区三区在线视频 | 91免费视频 | 91国产精品 | 欧美日韩精品一区二区三区 | 欧美亚洲综合久久 | 国产精品原创av | 激情婷婷 | 久久精品国产亚洲一区二区三区 | 国产精品久久久麻豆 | 日韩在线免费视频 | 久久中文字幕一区 | 日本黄色一级片免费看 | 欧美日韩亚洲在线 | 久久国产精品久久 | 亚洲精品久久久久久久久久久 | 中文字幕乱码亚洲精品一区 | 操人网站 | 红杏aⅴ成人免费视频 | 国产精品久久久久久亚洲调教 | 夜夜骑天天干 | 日产久久 | 日本久久精品一区二区 | 日韩有码一区 | 日干夜干天天干 | 国产色 | www.久久久久 | 美女久久| 亚洲成人黄色 | 日韩亚洲一区二区 | av电影天堂网 | 日本视频在线 | 亚洲一级黄色 | 国产成人中文字幕 | 中文字幕视频在线观看 | 欧美三级在线播放 | 亚洲人人舔人人 | 国产成人久久精品麻豆二区 | 国产精品1区2区3区 国产在线观看一区 | 刘亦菲的毛片 | 亚洲国产成人av好男人在线观看 | 国产精品一区二区三 | 国产精品久久 | 日韩成人免费 | 人人看人人干 | 久久爱www. | 99精品网 | 日本a在线| 欧美在线观看网站 | 成人一级片视频 | 国产视频久久久久久久 | 久久久亚洲 | 国产精品久久久久久久一区探花 | 日韩精品第一页 | 亚洲毛片在线观看 | 国产亚洲欧美一区二区 | 免费在线一区二区三区 | 在线亚洲免费 | 国产免费av网站 | 国产在线一区二区 | 另类天堂 | 成年入口无限观看网站 | 久久国产精品久久 | 精品国产乱码久久久久久闺蜜 | 亚洲一区二区三区在线免费观看 | 国产精品久久久久久久久久久久久久 | 亚洲美女精品视频 | 国产精品免费一区二区三区四区 | 91大神xh98hx在线播放 | 欧美日韩视频一区二区 | 日本中文字幕一区 | 精品96久久久久久中文字幕无 | 久久国产传媒 | 成人三区| 国产精品178页 | 综合久久综合久久 | 深夜福利亚洲 | 亚洲精品中文字幕在线观看 | 夜夜夜操操操 | 欧美精品福利 | 狠狠狠色丁香婷婷综合久久五月 | 成人福利视频 | 国产剧情一区二区 | 1000部精品久久久久久久久 | 国产日韩精品一区二区 | 久久成人免费视频 | 国产成在线观看免费视频 | 天天操天天舔 | av自拍| 中文字幕在线观看精品视频 | 久久精品久久久久久久久久16 | 亚洲一区二区av | 一区二区视频 | 欧美国产伦久久久久久 | 精品欧美黑人一区二区三区 | 国产视频网 | 国产最新视频在线 | 九九视频网 | 999国产在线视频 | 成人老司机 | 国产精品一区二区三区免费 | 精品免费视频 | 国产伦精品一区二区三区四区视频 | 国产精选久久 | 欧美高清视频一区二区三区 | 一区二区三区高清 | www.国产高清| 欧美自拍视频 | 欧美精品一区二区三区一线天视频 | 日韩经典一区 | 欧美亚洲高清 | caoporn国产精品免费公开 | 99精品欧美一区二区三区 | 香蕉久久夜色精品国产使用方法 | 日韩欧美在线一区二区 | 欧美与黑人午夜性猛交久久久 | 午夜在线电影 | sese综合| 国产精品久久久久久一区二区三区 | 天天操天天插天天干 | 精国产品一区二区三区四季综 | 免费日韩 | 99精品一区二区三区 | 国产成人精品一区二区在线 | 久久9999 | 青青草精品| 色999国产 | 婷婷免费在线观看 | 在线色站 | 亚洲视频中文字幕 | av片在线观看 | 一级片国产 | 9久9久 | 国产精品久久久久久久久久东京 | 亚洲xx在线 | 国产精品视频导航 | 91精品一区二区三区久久久久久 | 亚洲午夜精品一区二区三区 | xvideos.蜜桃一区二区 | 国产高潮好爽受不了了夜色 | 久久久999精品视频 欧美老妇交乱视频 | 日本精品视频网站 | 午夜精品久久 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 99热在线看 | 成人一级片视频 | 欧美精品在线免费观看 | 成人免费视频网站在线观看 | 免费国产黄网站在线观看视频 | 欧美日韩三级在线 | 国产传媒在线观看 | 久久久久亚洲精品 | 日韩一区二区三区在线看 | 欧美成人高清 | 国产精品成av人在线视午夜片 | 欧美一区二区三区在线观看 | 成人精品一区二区三区 | 久久精品小视频 | 夜夜草天天干 | aaaaaa黄色片| 欧洲视频一区二区 | 无码少妇一区二区三区 | 国产精品黄视频 | 精品久久中文字幕 | 国产乡下妇女做爰视频 | 中文字幕一区二区三区在线视频 | 一级免费av| 亚洲一区视频在线播放 | 久久99这里只有精品 | 国产精品中文字幕在线 | 中文字幕在线观看第一页 | 免费成人av网 | 欧美日韩在线电影 | 日韩中文字幕一区 | 五月天中文字幕 | 国产精品高潮呻吟 | 视频精品一区 | 色www精品视频在线观看 | 国产一区二区视频在线 | 北条麻妃99精品青青久久 | 一级做a爰片毛片 | 日韩一区二区在线视频 | 成人看片免费网站 | 国产 日韩 一区 | 久久国产精品99久久久久久牛牛 | 天堂久久久久久 | 免费网站看v片在线a | 国产精品久久久久久久久 | 欧美日韩国产一区二区三区不卡 | 国产精品成人3p一区二区三区 | 成人在线观看免费视频 | 国产中文字幕一区 | av动漫一区二区 | 91亚洲国产成人久久精品网站 | 国产男女做爰免费网站 | 亚洲jizzjizz日本少妇 | 国产一区久久久 | 久久精品免费观看 | 欧美激情一区二区三区蜜桃视频 | jlzzjlzz国产精品久久 | 国产精品久久免费观看spa | 欧美精品免费在线 | 免费一区二区 | 久久精精品 | 国产大学生援交视频在线观看 | 亚洲免费观看视频 | 久久不射电影网 | 日韩av一区在线 | 久久伊人操 | 一级片欧美 | www中文字幕 | 亚洲国产二区 | 国外成人在线视频网站 | 国产乱码精品一区二区三区忘忧草 | 成人片免费看 | 欧美一区久久 | 一级一级国产片 | 午夜午夜精品一区二区三区文 | 精品免费久久 | 91污在线| 久久精品国产99国产 | 国产精品午夜电影 | 久久精品毛片 | 午夜不卡一区二区 | 亚洲国产成人精品女人久久久 | 91国产精品 | 日韩在线不卡视频 | www.日韩大片| 久久久久亚洲av毛片大全 | 日本乱偷中文字幕 | 看毛片的网站 | 一区二区三区免费在线 | 久久99精品国产自在现线 | 日韩视频在线观看 | 中文字幕在线观看av | 欧美视频精品 | 国产综合亚洲精品一区二 | 国产精品99久久久久久宅男 | 久久久久久免费毛片精品 | 一级色视频 | 日日干天天操 | 国产亚洲视频在线 | 国产福利91精品 | 久久天堂av综合合色蜜桃网 | 99热.com| 国产一区 | 国产精品高潮呻吟久久av黑人 | 精品日韩欧美一区二区在线播放 | 在线精品亚洲欧美日韩国产 | 国产二区三区 | www久久久 | 欧美日韩综合精品 | 国产欧美一区二区精品婷 | 欧美日韩在线一区二区三区 | 久草福利在线视频 | 最新国产毛片 | 亚洲国产久 | 精品成人佐山爱一区二区 | 日韩在线欧美 | 91人人澡人人爽 | www.国产一区| 一区二区三区亚洲精品国 | 亚洲一区二区三区 | 无码日韩精品一区二区免费 | 欧美理论片在线观看 | 久久综合狠狠综合久久综合88 | 成人一二三区 | 日韩中文字幕一区二区 | 中文精品在线 | 99re6在线视频精品免费 | 91社影院在线观看 | 综合二区 | 欧美日韩国产综合在线 | 成人一级视频在线观看 | 亚洲人人 | 国产高清视频一区二区 | 91福利视频导航 | 亚洲欧美一区二区三区视频 | 日韩一区二区在线观看 | 国产福利在线观看 | 日韩一区在线播放 | 亚洲成人伊人 | 午夜合集 | 欧美日韩国产一级片 | 亚洲精品视频一区 | 久久婷婷欧美 | 成人亚洲精品久久久久软件 | 96自拍视频 | 国内精品三级 | 国产精品久久久久久久久 | 国产精品久久免费视频 | 国产51人人成人人人人爽色哟哟 | 巴西性猛交xxxx免费看久久久 | 开操网| 欧美韩国日本一区 | а√天堂资源中文最新版地址 | 韩日精品视频 | 亚洲欧美电影 | 日韩午夜电影 | 看久久毛片| 亚洲精品色 | 毛片链接 | 最新av在线网址 | 欧美激情欧美激情在线五月 | 国产欧美一区二区 | 久久综合狠狠综合久久综合88 | 日韩成人在线免费视频 | 久久久久国产精品 | 久久久久av |