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

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

spring cloud oauth2 實現用戶認證登錄的示例代碼

瀏覽:3日期:2023-08-05 14:09:12

需求

在微服務架構中,我們有很多業務模塊,每個模塊都需要有用戶認證,權限校驗。有時候也會接入來自第三方廠商的應用。要求是只登錄一次,即可在各個服務的授權范圍內進行操作。看到這個需求,立馬就想到了這不就是單點登錄嗎?于是基于這樣的需求,作者使用spring-cloud-oauth2去簡單的實現了下用戶認證和單點登錄。

相關介紹

OAuth2

OAuth2是一個關于授權的網絡標準,他定制了設計思路和執行流程。OAuth2一共有四種授權模式:授權碼模式(authorization code)、簡化模式(implicit)、密碼模式(resource owner password)和客戶端模式(client credentials)。數據的所有者告訴系統同意授權第三方應用進入系統,獲取這些數據。于是數據所有者生產了一個短時間內有效的授權碼(token)給第三方應用,用來代替密碼,供第三方使用。具體流程請看下圖,具體的OAuth2介紹,可以參考這篇文章,寫的很詳細。(https://www.jb51.net/article/198292.htm)

spring cloud oauth2 實現用戶認證登錄的示例代碼

Token

令牌(token)和密碼(password)的作用是一樣的,都可以進入系統獲取資源,但是也有幾點不同:

令牌是短期的,到期會自動失效,用戶無法修改。密碼是長期的,用戶可以修改,如果不修改,就不會發生變化。 令牌可以被數據所有者撤銷,令牌會立即失效。密碼一般不允許其他人撤銷,只能被操作權限更高的人或者本人修改/重制。 令牌是有權限范圍的,會被數據所有者授予。

實現的功能

本篇介紹的是通過密碼模式來實現單點登錄的功能。

​ 在微服務架構中,我們的一個應用可能會有很多個服務運行,協調來處理實際的業務。這就需要用到單點登錄的技術,來統一認證調取接口的是哪個用戶。那總不能請求一次,就認證一次,這么做肯定是不行的。那么就需要在認證完用戶之后,給這個用戶授權,然后發一個令牌(token),有效期內用戶請求資源時,就只需要帶上這個標識自己身份的token即可。

架構說明認證中心:oauth2-oauth-server,OAuth2的服務端,主要完成用戶Token的生成、刷新、驗證等。

微服務:mzh-etl,微服務之一,接收到請求之后回到認證中心(oauth2-oauth-server)去驗證。

代碼實現

使用到的框架是java基礎的spring boot 和spring-cloud-oauth2

認證中心:

1、引入需要的maven包

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>

因為spring-cloud-starter-oauth2中包含了spring-cloud-starter-security,所以就不用再單獨引入了,引入redis包是為了使用redis來存儲token。

2、配置application.yml

這里主要用到的是redis的配置,mysql數據庫的配置暫時沒有用到。

spring: application: name: oauth-server datasource: url: jdbc:mysql://localhost:3306/mzh_oauth?useSSL=false&characterEncoding=UTF-8 username: root password: admin123 driver-class-name: com.mysql.jdbc.Driver hikari: connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 maximum-pool-size: 9 redis: database: 0 host: localhost port: 6379 jedis: pool: max-active: 8 max-idle: 8 min-idle: 0 timeout: 10000server: port: 8888 use-forward-headers: truemanagement: endpoint: health: enabled: true

3、spring security 權限配置

需要繼承WebSecurityConfigurerAdapter

/** * @Author mzh * @Date 2020/10/24 */@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserDetailsService customUserDetailsService; /** * 修改密碼的加密方式 * @return */ @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception{ return super.authenticationManagerBean(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception{ // 如果使用BCryptPasswordEncoder,這里就必須指定密碼的加密類 auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers('/oauth/**').permitAll(); }}

BCryptPasswordEncoder是一個不可逆的密碼加密類,AuthenticationManager是OAuth2的password必須指定的授權管理Bean。

CustomUserDetailsService這個類是被注入進來的,熟悉spring security的同學應該知道,spring security有一個自己的UserdetailsService用于權限校驗時獲取用戶信息,但是很多時候不符合我們的業務場景,就需要重現實現這個類。

4、實現CustomUserDetailsService

UserDetailsService這個類的核心方法就是loadUserByUsername()方法,他接收一個用戶名,返回一個UserDetails對象。

/** * @Author mzh * @Date 2020/10/24 */@Component(value = 'customUserDetailsService')public class CustomUserDetailsService implements UserDetailsService { @Autowired private PasswordEncoder passwordEncoder; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 1. 根據username 去數據庫查詢 user // 2.獲取用戶的角色和權限 // 下面是寫死,暫時不和數據庫交互 if(!(('admin').equals(username))){ throw new UsernameNotFoundException('the user is not found'); }else{ String role = 'ADMIN_ROLE'; List<SimpleGrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(role)); String password = passwordEncoder.encode('123456'); return new User(username,password,authorities); } }}

這里是在程序中寫死了用戶和權限。賬號:admin,密碼:123456,權限:ADMIN_ROLE(注意是權限,不是角色),實際中應該從數據庫獲取用戶和相關的權限,然后進行認證。

5、OAuth2 配置

OAuth2配置需要繼承AuthorizationServerConfigurerAdapter類

/** * @Author mzh * @Date 2020/10/24 */@Configuration@EnableAuthorizationServerpublic class Oauth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private PasswordEncoder passwordEncoder; @Autowired private UserDetailsService customUserDetailsService; @Autowired private AuthenticationManager authenticationManager; @Autowired private TokenStore redisTokenStore; /** * 對AuthorizationServerEndpointsConfigurer參數的重寫 * 重寫授權管理Bean參數 * 重寫用戶校驗 * 重寫token緩存方式 * @param endpointsConfigurer * @throws Exception */ @Override public void configure(final AuthorizationServerEndpointsConfigurer endpointsConfigurer) throws Exception{ endpointsConfigurer.authenticationManager(authenticationManager) .userDetailsService(customUserDetailsService) .tokenStore(redisTokenStore); } /** * 客戶端的參數的重寫 * 這里是將數據直接寫入內存,實際應該從數據庫表獲取 * clientId:客戶端Id * secret:客戶端的密鑰 * authorizedGrantTypes:授權方式 * authorization_code: 授權碼類型, * implicit: 隱式授權, * password: 密碼授權, * client_credentials: 客戶端授權, * refresh_token: 通過上面4中方式獲取的刷新令牌獲取的新令牌, * 注意是獲取token和refresh_token之后,通過refresh_toke刷新之后的令牌 * accessTokenValiditySeconds: token有效期 * scopes 用來限制客戶端訪問的權限,只有在scopes定義的范圍內,才可以正常的換取token * @param clients * @throws Exception */ @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception{ clients.inMemory() .and() .withClient('mzh-etl') .secret(passwordEncoder.encode('mzh-etl-8888')) .authorizedGrantTypes('refresh_token','authorization_code','password') .accessTokenValiditySeconds(3600) .scopes('all'); } @Override public void configure(AuthorizationServerSecurityConfigurer serverSecurityConfigurer) throws Exception{ serverSecurityConfigurer.allowFormAuthenticationForClients(); serverSecurityConfigurer.checkTokenAccess('permitAll()'); serverSecurityConfigurer.tokenKeyAccess('permitAll()'); serverSecurityConfigurer.passwordEncoder(passwordEncoder); }}

6、啟動服務

上述步驟完成之后啟動服務,然后觀察IDEA下方的Endpoints中的Mappings,就可以找到相關的認證端口。主要的有以下幾個:

POST /oauth/authorize 授權碼模式認證授權接口 GET/POST /oauth/token 獲取 token 的接口 POST /oauth/check_token 檢查 token 合法性接口

到此,認證中心就算是創建完成了。我們通過idea的REST Client 來請求一個token進行測試。

請求內容如下:

POST http://localhost:8888/oauth/token?grant_type=password&username=admin&password=123456&scope=all Accept: */* Cache-Control: no-cache Authorization: Basic dXNlci1jbGllbnQ6dXNlci1zZWNyZXQtODg4OA==

第一行POST http://localhost:8888/oauth/token?grant_type=password&username=admin&password=123456&scope=all 表示發起一個POST請求,請求路徑是/oauth/token,請求參數是grant_type=password表示認證類型是password,username=admin&password=123456表示用戶名是admin,密碼是123456,scope=all是權限相關的,之前在Oauth2Config中配置了scope是all。

第四行表示在請求頭中加入一個字段Authorization,值為Basic空格base64(clientId:clientSecret),我們之前配置的clientId是“meh-etl”,clientSecret是'meh-etl-8888',所以這個值的base64是:bXpoLWV0bDptemgtZXRsLTg4ODg=。

運行請求之后,如果參數都正確的話,獲取到返回的內容如下:

{ // token值,后面請求接口時都需要帶上的token 'access_token': 'b4cb804c-93d2-4635-913c-265ff4f37309', // token的形式 'token_type': 'bearer', // 快過期時可以用這個換取新的token 'refresh_token': '5cac05f4-158f-4561-ab16-b06c4bfe899f', // token的過期時間 'expires_in': 3599, // 權限范圍 'scope': 'all'}

token值過期之后,可以通過refresh_token來換取新的access_token

POST http://localhost:8888/oauth/token?grant_type=refresh_token&refresh_token=706dac10-d48e-4795-8379-efe8307a2282 Accept: */* Cache-Control: no-cache Authorization: Basic dXNlci1jbGllbnQ6dXNlci1zZWNyZXQtODg4OA==

這次grant_type的值為“refresh_token”,refresh_token的值是要過期的token的refresh_token值,也就是之前請求獲取Token的refresh_token值,請求之后會返回一個和獲取token時一樣格式的數據。

微服務

1、引入需要的maven包

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2、配置application.yml

spring: application: name: mzh-etl redis: database: 1 host: localhost port: 6379 jedis: pool: max-active: 8 max-idle: 8 min-idle: 0 timeout: 10000server: port: 8889security: oauth2: client: # 需要和之前認證中心配置中的一樣 client-id: mzh-etl client-secret: mzh-etl-8888 # 獲取token的地址 access-token-uri: http://localhost:8888/oauth/token resource: id: mzh-etl user-info-uri: user-info authorization: # 檢查token的地址 check-token-access: http://localhost:8888/oauth/check_token

這里的配置一定要仔細,必須和之前認證中心中配置的一樣。

3、資源配置

在OAuth2中接口也稱為資源,資源的權限也就是接口的權限。spring-cloud-oauth2提供了關于資源的注解

@EnableResourceServer/** * @Author mzh * @Date 2020/10/24 */@Configuration@EnableResourceServer@EnableGlobalMethodSecurity(prePostEnabled = true)public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Value('${security.oauth2.client.client-id}') private String clientId; @Value('${security.oauth2.client.client-secret}') private String clientSecret; @Value('${security.oauth2.authorization.check-token-access}') private String checkTokenEndpointUrl; @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean('redisTokenStore') public TokenStore redisTokenStore(){ return new RedisTokenStore(redisConnectionFactory); } @Bean public RemoteTokenServices tokenService() { RemoteTokenServices tokenService = new RemoteTokenServices(); tokenService.setClientId(clientId); tokenService.setClientSecret(clientSecret); tokenService.setCheckTokenEndpointUrl(checkTokenEndpointUrl); return tokenService; } @Override public void configure(ResourceServerSecurityConfigurer resources) throws Exception { resources.tokenServices(tokenService()); } @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers('/get/**').authenticated(); }}

4、創建一個接口

@RestControllerpublic class UserController { @GetMapping('get') @PreAuthorize('hasAuthority(’ADMIN_ROLE’)') public Object get(Authentication authentication){ authentication.getAuthorities(); OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails(); String token = details.getTokenValue(); return token; }}

這個接口就是會返回一個請求他時攜帶的token值,@PreAuthorize會在請求接口時檢查是否用權限“ADMIN_ROLE”(之前認證中心配置的權限)

5、啟動服務

啟動服務,只有當用戶有“ADMIN_ROLE“的時候,才能正確返回,否則返回401未授權

同樣適用REST Client來發起一個請求:

GET http://localhost:8889/get Accept: */* Cache-Control: no-cache Authorization: bearer b4cb804c-93d2-4635-913c-265ff4f37309

請求路徑是http://localhost:8889/get 然后在請求頭部帶上我們上一步驟獲取到的token,放入到Authorization中,格式是bearer空格token值,如果請求成功,就會把token原樣返回。

到此這篇關于spring cloud oauth2 實現用戶認證登錄的示例代碼的文章就介紹到這了,更多相關spring cloud oauth2 認證登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 亚洲国产精品一区二区第一页 | 99亚洲| 成人免费在线电影 | 毛片久久久 | 视频在线一区二区 | 999国产在线观看 | 亚洲婷婷综合网 | 在线播放亚洲 | 免费观看黄色 | 日韩久久影院 | 91免费版在线观看 | 精品三级三级三级三级三级 | 中文字幕乱码亚洲精品一区 | 国产午夜手机精彩视频 | 毛片国产| 一色屋精品久久久久久久久久 | 91在线视频播放 | 成人1区| 国产成人无遮挡在线视频 | 国产一区久久久 | 亚洲精品国产区 | 日日噜| 中文字幕免费观看 | 视频一区二区三区在线观看 | 人人人人人你人人人人人 | 精品国产31久久久久久 | 国产一区日韩在线 | 91丁香婷婷综合久久欧美 | 精品香蕉视频 | 亚洲国产婷婷香蕉久久久久久99 | 久久com| 一级大片免费观看 | 色精品| 国产精品伊人 | 欧美在线视频一区 | 91久久久久久久久久久久久久久久 | 一区国产精品 | 一区二区精品在线 | 欧美激情国产日韩精品一区18 | 欧美专区在线 | 欧美综合一区二区 | 精品乱子伦一区二区三区 | 可以在线观看的黄色 | 国产美女一区二区 | 91视视频在线观看入口直接观看 | 亚洲国产精品va在线看黑人 | 欧美成人精品一区二区男人看 | 一区二区福利 | 欧美xxxx做受欧美 | 亚洲一区二区三区高清 | 亚洲欧美日韩一区 | 欧美日本韩国一区二区三区 | 99精品亚洲 | 男女精品 | 久久久精品久久久久 | 亚洲国产激情 | 天堂视频在线 | 精品www| 黄色短视频在线观看 | 亚洲精品色 | 久久久久久久久久久免费视频 | 天天干夜夜爽 | 一区二区三区亚洲 | 国产成人精品综合 | 免费成人在线网站 | 日韩在线视频资源 | 国产精品极品美女在线观看免费 | 国产麻豆乱码精品一区二区三区 | 久久综合九色综合欧美狠狠 | 91麻豆精品国产91久久久资源速度 | 精品1区2区 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 日韩1| 不用播放器的免费av | 欧美高清视频在线观看 | www..99热| 狠狠色狠狠色合久久伊人 | 久久久精品亚洲 | 欧美日韩国产综合视频 | 成人亚洲| 欧美二区三区 | 欧美在线视频一区 | 久草网站 | 在线99视频| 欧美亚洲综合久久 | 久草综合在线 | 色在线看 | 成人免费视频观看 | 黄a在线观看 | 亚洲欧洲av在线 | 国产黄色在线播放 | 国产精品久久久久久吹潮 | 91精品国产综合久久福利软件 | 黄色片免费在线观看视频 | 日韩欧美在线观看视频网站 | 国产精品久久久久久婷婷天堂 | 成人日韩在线观看 | 大陆一级毛片免费视频观看 | 国产精品久久久久久亚洲调教 | 亚洲精品成人久久久 | 亚洲精品影院 | 性做久久久久久 | 午夜免费片 | 一道本视频 | 国产美女在线观看 | 午夜精品视频在线观看 | 秋霞av电影 | h网站在线观看 | 成人福利在线观看 | 久草在线 | 欧美色综合一区二区三区 | 国产精品毛片一区二区在线看 | 一区二区三区在线观看免费 | 亚洲精选免费视频 | 丝袜久久 | 亚洲欧美中文日韩在线v日本 | 天天干天天操 | 国产羞羞视频 | 欧美极品一区二区三区 | 午夜精品久久久久久久久久久久久 | 激情91| 成人av免费 | 综合久久网 | 国产欧美日韩 | 国产一区二区影院 | 成人不卡| 懂色av一区二区三区在线播放 | 国产精品99久久久久久动医院 | 欧美第一页 | 日本免费在线 | 欧美日韩国产一区二区三区 | 亚洲国产精品99久久久久久久久 | 狠狠插狠狠操 | 91精品久久久久久久久入口 | 精品国产乱码久久久久久88av | 九九久久久 | 国产区第一页 | 国产美女黄色片 | 国产精品美女视频 | 欧美另类专区 | 亚洲电影免费 | 五月婷婷综合激情 | 欧洲成人午夜免费大片 | 91免费看片网站 | 99精品久久久国产一区二区三 | 国产一区二区三区欧美 | 精品国产乱码久久久久久1区2区 | 一区二区三区日韩在线 | 一级毛片视屏 | 91精品国产777在线观看 | 免费看黄视频网站 | 麻豆久久精品 | 久久精品com | 中国黄色毛片 大片 | 亚洲综合精品久久 | 精品欧美一区二区三区久久久 | 九九综合久久 | 欧美成人精品 | 国产成人精品午夜视频' | 黄在线免费观看 | 亚洲 欧美 日韩在线 | 蜜桃comaaa | 婷婷亚洲综合 | 久久激情视频 | 黑人巨大精品欧美一区二区小视频 | 国产精品久久久久一区二区三区 | 久久久av亚洲男天堂 | 大胆裸体gogo毛片免费看 | 国产成人精品一区二 | 久久久精品一区 | 新99热 | 亚洲精品乱码久久久久久不卡 | 国产精品久久久久婷婷二区次 | 国产精品美女久久久久久久网站 | 成人在线观看免费 | 北条麻妃99精品青青久久 | 黄色毛片在线观看 | 日本私人网站在线观看 | 午夜草逼 | 久久久精 | 亚洲综合在线播放 | 国产精品亚洲精品 | 久久久久久影院 | 色先锋av资源中文字幕 | 久一久久 | 国产日韩一区二区三区 | 欧美一区视频 | 欧美一区二区在线 | 91精品国产乱码久久久久久久久 | 国产成人av综合 | 日韩成年视频 | 国产色视频在线观看免费 | 久久精品国产免费 | 亚洲深深色噜噜狠狠网站 | 国产成人精品一区二区三区视频 | 亚洲国产成人精品女人久久久 | 欧美精品一区二区在线观看 | jlzzjlzz亚洲日本少妇 | 自拍偷拍欧美 | 色视频免费在线观看 | 国产精品久久天天躁 | 欧美黑人一级爽快片淫片高清 | 在线视频一区二区三区 | 亚洲国产成人在线视频 | www亚洲成人 | 亚洲精品久久久久久下一站 | 精品国产不卡一区二区三区 | 日韩成人免费 | 午夜精品一区二区三区在线 | 四虎影院入口 | 国产ts余喵喵和直男多体位 | 成人深夜福利视频 | 日韩一区二区观看 | www.久久精品 | 99久久久国产精品 | 一区二区三区精品视频 | 亚洲网站在线观看 | 亚洲欧美在线免费 | 亚洲欧洲在线观看 | 日韩午夜视频在线观看 | 午夜精品久久久久久久久久久久 | 日本激情在线 | 日韩视频在线观看中文字幕 | 亚洲欧洲成人 | 天天操夜夜操av | 一区二区精品视频 | 亚洲一区国产精品 | 国产九色视频 | 日日干夜夜干 | www.成人.com | 性视频黄色 | 青青草免费在线 | 亚洲电影在线观看 | www.国产视频| 一本色道久久综合狠狠躁篇的优点 | 日韩欧美在线视频播放 | 热久久这里只有精品 | 九九九视频精品 | 中国黄色毛片 大片 | 欧美在线观看禁18 | av入口| 国产福利91精品一区二区 | 日韩高清中文字幕 | 亚洲成人二区 | 狠久久| 国产在线高清 | 91免费电影 | 亚洲精品片 | 国产视频成人 | 日本a在线 | 婷婷精品 | 欧美一区日韩一区 | 大胆裸体gogo毛片免费看 | 精品1区| 超碰美女 | 亚洲午夜成激人情在线影院 | 欧美在线播放一区二区三区 | 新91在线视频 | 人人草视频在线观看 | 国产高清视频 | 九九99 | 欧美日一区二区 | 狠狠操夜夜爱 | 亚洲成人av| 亚洲成人综合网站 | 午夜视频在线观看网站 | 久久久二| 国产精品3区 | h成人在线 | 久久久国产精品 | 中文字幕久久综合 | www.国产视频 | 国产精品久久久久久久久久免费 | 在线欧美日韩 | 久久人人爽爽爽人久久久 | 最新国产在线视频 | 先锋影音在线观看 | 国产激情视频 | 视频在线一区 | 日本黄色一级片视频 | 国产色视频网站 | 午夜视频黄 | 亚洲日本乱码一区两区在线观看 | 精品国产成人 | 免费国产黄网站在线观看视频 | 成人福利视频 | 成人激情视频在线播放 | 久久精品欧美一区二区三区不卡 | 国产一区日韩欧美 | av天天干| 欧美日韩中文 | 视频一区在线播放 | 91精品国产综合久久久久久丝袜 | 免费看黄视频网站 | 99视频精品 | 狠狠爱www人成狠狠爱综合网 | 91精品久久久久久久久中文字幕 | 四季久久免费一区二区三区四区 | 亚洲二区视频 | 在线中文一区 | 久久国内 | 天天操天天碰 | 天天天干夜夜夜操 | 91在线看片 | 国产中文在线 | 国产一区二区三区四区在线观看 | 精品乱子伦一区二区三区 | 国产精品久久久久久久久久久新郎 | 人人草视频在线观看 | 国产一级毛片在线视频 | 久久久久久久久久久久久九 | 国产美女精品人人做人人爽 | 91久久国产综合久久蜜月精品 | 欧美一区二区三区视频在线观看 | 亚洲最大av网站 | 噜噜噜天天躁狠狠躁夜夜精品 | 久久久久久国产精品高清 | a久久| 午夜剧 | 黄色毛片免费看 | 99热热热热 | 亚洲一区| 91在线观看视频 | jav成人av免费播放 | 中文无码日韩欧 | 日韩精品一区二区三区 | 午夜影视在线观看 | 亚洲综合色视频在线观看 | 日韩一区二区黄色片 | 亚洲国产精品成人无久久精品 | 国产午夜视频 | 成人免费视频在线观看 | 午夜男人的天堂 | av在线免费看片 | 禁果av一区二区三区 | 午夜大片在线观看 | 97色免费视频 | 人人人射 | 亚洲人成在线播放 | 亚洲欧美综合一区 | 91精品国产综合久久久久久丝袜 | 一级毛片免费完整视频 | 免费操片 | 视频一区二区三区免费观看 | 日韩精品视频久久 | 久久精品国产一区二区三 | 国产成人av一区二区 | 成人免费一区二区三区视频网站 | 中文在线观看www | 亚州精品天堂中文字幕 | 欧美自拍视频 | 91免费观看视频 | 久久女同互慰一区二区三区 | 一区二区三区中文字幕 | 亚洲精品一区国产精品 | 国产精品无码永久免费888 | 欧美日本亚洲 | 精品国产一区二区三区久久久久久 | 国产高清精品在线 | 亚洲一区二区三区久久久 | 麻豆av在线播放 | 美女午夜视频 | 在线国产一区 | 久久精品1区 | 国产精品美女久久久久久免费 | 日韩免费福利视频 | 亚洲性视屏| 国产精品久久久久久二区 | 久久爱www. | 妹子干综合| 天天看夜夜爽 | 亚洲成人精品区 | 午夜男人的天堂 | 日韩在线不卡 | 久久在线播放 | 精品一区二区三区免费毛片爱 | 亚洲欧美精品一区二区三区 | 成人区一区二区三区 | 色综合一区二区三区 | 免费毛片一区二区三区久久久 | 亚洲精品久久久久avwww潮水 | 蜜桃av网址 | 成人精品一区二区三区中文字幕 | 欧美精品一二三 | 国产成人小视频 | 99热播在线 | 国产在线二区 | 97人人干| 久久久久久亚洲精品视频 | 97精品一区二区三区 | 色婷婷导航 | 亚洲人成人一区二区在线观看 | 日韩精品在线播放 | 最新日韩av网址 | 亚洲性人人天天夜夜摸 | 国产福利在线观看 | 中国一级大黄大黄大色毛片 | 亚洲成人日韩 | 黄篇网址 | 涩久久| 欧美成视频 | 色网网站 | 中文字幕一区二区三区四区 | 夜添久久精品亚洲国产精品 | 一级片黄片毛片 | 亚洲欧美日韩国产综合 | 九九热这里只有精品8 | av网址在线播放 | 国产精品亚洲区 | 日本福利视频免费观看 | 午夜免费影视 | 午夜久久久 | 亚洲黄色免费 | 亚洲一区二区在线视频 | 国产精品九九九 | 在线中文字幕日韩 | 成人av电影网址 | 欧美精品一区二区三区免费视频 | 免费三片在线观看网站 | 青青草网站 | 亚洲精品一二三区 | 一区二区三区四区在线播放 | 国产高清在线精品 | 久久精品小视频 | 日韩一区二区三区在线视频 | 免费不卡视频 | 少妇一级淫免费放 | 色成人免费网站 | 天天射欧美 | 欧美综合精品 | 黄色日本视频 | 中文字幕久久综合 | 爱爱视频在线观看 | 婷婷综合 | 久久精品亚洲精品 | 欧美日韩国产精品一区二区亚洲 | 9久9久| 综合伊人 | 国产91成人在在线播放 | 亚洲欧美综合 | 欧美精品一区二区三区蜜桃视频 | 精品国产31久久久久久 | 日韩欧美成人影院 | 久久精品视频在线播放 | 精品久久久久久 | 亚洲欧美视频一区 | 欧美精品欧美精品系列 | 久久99久久99精品免观看粉嫩 | 欧美一区永久视频免费观看 | 精品日韩一区 | 国产成人jvid在线播放 | 亚州中文| 久久久久久久久久毛片 | 久久久久久免费看 | 一级大片av | 九九只有精品 | 国产福利91精品一区二区三区 | 成人精品在线视频 | 日韩在线中文字幕视频 | 性处破╳╳╳高清欧美 | 久久人人爽人人爽人人片av不 | 欧美日韩激情一区二区三区 | 亚洲国产日本 | 国产精品久久久久国产a级 91福利网站在线观看 | 夜夜撸av| 国产精品久久久久久久久久妞妞 | 精品999| a级在线 | 欧美在线视频一区二区 | 91麻豆精品国产91久久久久 | 99久久精品免费看国产一区二区三区 | 国产三级精品三级 | 国产乱人伦av在线a 天天碰天天操 | 欧美国产日韩另类 | 午夜影院免费 | 亚洲成人首页 | 亚洲一区精品在线 | 日韩精品一区二区三区在线观看 | 久久久久一区二区 | 久久99精品久久久久久久青青日本 | 一区二区av | 永久免费在线 | 亚洲精品一区二区三区在线 | 国产99久久精品 | 成人性生交大片免费看中文带字幕 | 国产一区二区三区精品久久久 | 欧美激情一区二区三级高清视频 | 99这里只有精品 | 国产精品久久久久久无遮挡 | 激情视频在线观看免费 | 欧美一级二级视频 | 麻豆视频国产 | 亚洲久久 | 日韩一区二区三区在线看 | 亚洲一区久久 | 91久久极品 | 黄色视频a级毛片 | 午夜合集| 久久久人成影片一区二区三区 | 操人网址| 午夜免费 | 国产精品一区2区 | 91精品久久 | 91亚洲国产成人久久精品网站 | 国产精品一区二区三 | 日本午夜在线 | 色黄网站 | 日韩极品在线 | 欧美精品欧美精品系列 | 久久男人天堂 | 99国产精品久久久久久久成人热 | 国产精品国产成人国产三级 | 在线观看中文字幕 | 91视频网址 | 毛片在线网站 | 9999国产精品| 夜夜骑天天干 | 中文在线一区 | 99免费在线观看视频 | 久久美女 | a网站在线观看 | 亚洲精品aaa| 欧美日韩国产影院 | 中文字幕在线不卡 | 男女黄色免费网站 | 性一交一乱一透一a级 | 国产精品久久久久久久久 | 日韩免费在线观看视频 | 国产麻豆一区二区三区 | 成人av在线网 | 日日骑夜夜操 | 国产亚洲一区二区在线 | 国产.com| 91精品国产91久久久久久不卡 | 国产精品国产精品国产专区不片 | 9 1在线观看 | 亚洲精品久久久久久下一站 | 国产精品一区二区三 | 狠狠的干| 日本网站在线免费观看 | 毛片a片| 久久久资源 | 国产精品婷婷久久久久 | 午夜视频网站 | 国产情侣在线视频 | 99成人在线视频 | 国产一区2区 | 五月激情综合婷婷 | 午夜免费高清视频 | a免费网站 | 欧美片网站免费 | 精品国产1区2区3区 在线国产视频 | 伊人草 | 国产高清久久久 | 天堂av2020 | 中文字幕亚洲一区 | 日韩高清在线一区 | 免费黄色小视频 | 国产精品99久久免费观看 | 蜜臀久久99精品久久久无需会员 | 国产中文在线 | 国产一级毛片在线视频 | 欧美精品99 | 亚洲国产精品第一区二区 | 天天操网 | 日本一区二区中文字幕 | 精品国产一区二区三区久久久久久 | 成人精品视频在线观看 | 久草免费福利 | 天天干狠狠| 欧美日韩一区二区视频在线观看 | 日韩电影专区 | 粉嫩在线 | 日韩在线一区二区三区 | 国产精品一区二区三区在线 | 欧美精品综合 | 狠狠狠 | 最新中文字幕在线 | 欧美激情一区 | 国产96精品久久久 | 一级毛片久久久 | 一级黄色大片免费 | 9l蝌蚪porny中文自拍 | 久久99国产一区二区三区 | 天天舔天天干天天操 | 亚洲精品一区二区三区麻豆 | 精品国产一区二区在线 | 国产精品一区二区三区av | 国产精品久久久久久久久久免费 | 久久av综合 | 美日韩一区二区三区 | 日韩中文字幕一区二区 | 欧美国产精品久久久 | 久久久久国产一区 | 中文字幕一区二区三区乱码在线 | 国产精品免费看 | 在线视频自拍 | 亚洲成人天堂 | 欧美精品一区三区 | 日本精品久久 | 免费一区二区 | 玖玖操 | 亚洲综合无码一区二区 | 黄色日本视频 | 欧美激情综合五月色丁香小说 | 毛片天堂 | 国产三级在线观看 | 国产精品1区 | 中文在线一区二区 | 天天艹逼| 精品国产乱码久久久久久1区2区 | 日本黄色片免费 | 在线播放国产一区二区三区 | 色综合天天综合网国产成人网 | 欧美精品综合在线 |