精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringSecurity系列之SpringBoot+CAS單點(diǎn)登錄

開發(fā) 架構(gòu)
某一個(gè) Client 需要接入 CAS Server 進(jìn)行驗(yàn)證,則該 Client 必須提前在 CAS Server 上配置其信息。這個(gè)信息既可以動(dòng)態(tài)添加,也可以通過 JSON 來配置,后面松哥會(huì)教搭建如何動(dòng)態(tài)添加,這里方便起見,我們還是通過 JSON 來進(jìn)行配置。

 [[408875]]

1.準(zhǔn)備工作

準(zhǔn)備工作主要做兩件事。

1.1 服務(wù)記錄

某一個(gè) Client 需要接入 CAS Server 進(jìn)行驗(yàn)證,則該 Client 必須提前在 CAS Server 上配置其信息。

這個(gè)信息既可以動(dòng)態(tài)添加,也可以通過 JSON 來配置,后面松哥會(huì)教搭建如何動(dòng)態(tài)添加,這里方便起見,我們還是通過 JSON 來進(jìn)行配置。

具體配置方式如下,在 CAS Server 中創(chuàng)建如下目錄:

  1. src/main/resources/services 

在該目錄下創(chuàng)建一個(gè)名為 client1-99.json 的文件,client1 表示要接入的 client 的名字,99 表示要接入的 client 的 id,json 文件內(nèi)容如下(這個(gè)配置可以參考官方給出的模版:overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/services/Apereo-10000002.json):

  1.   "@class""org.apereo.cas.services.RegexRegisteredService"
  2.   "serviceId""^(https|http)://.*"
  3.   "name""client1"
  4.   "id": 99, 
  5.   "description""應(yīng)用1 的定義信息"
  6.   "evaluationOrder": 1 

這段 JSON 配置含義如下:

  1. @calss 指定注冊(cè)服務(wù)類,這個(gè)是固定的org.apereo.cas.services.RegexRegisteredService。
  2. serviceId 則通過正則表達(dá)式用來匹配具體的請(qǐng)求。
  3. name 是接入的 client 的名稱。
  4. id 是接入的 client 的 id。
  5. description 是接入的 client 的描述信息。
  6. evaluationOrder 則指定了執(zhí)行的優(yōu)先級(jí)。

接下來再在 src/main/resources/application.properties 文件中配置剛剛 json 的信息,如下:

  1. cas.serviceRegistry.json.location=classpath:/services 
  2. cas.serviceRegistry.initFromJson=true 

這里有兩行配置:

  1. 指定配置 JSON 文件的位置。
  2. 開啟 JSON 識(shí)別。

OK,配置完成后,重啟 CAS Server。

CAS Server 啟動(dòng)成功后,我們?cè)诳刂婆_(tái)看到如下日志,表示 JSON 配置已經(jīng)加載成功了:

1.2 JDK 證書

第二個(gè)要提前準(zhǔn)備的東西就是 JDK 證書。

在實(shí)際開發(fā)中,這一步可以忽略,但是因?yàn)槲覀儸F(xiàn)在用的自己生成的 SSL 證書,所以我們要將自己生成的證書導(dǎo)入到 JDK 中,否則在使用 Spring Security 接入 CAS 單點(diǎn)登錄時(shí),會(huì)拋出如下錯(cuò)誤:

[[408877]]

將 SSL 證書導(dǎo)入 JDK 中的命令其實(shí)也很簡單,兩個(gè)步驟,第一個(gè)導(dǎo)出 .cer 文件,第二步,導(dǎo)入 JDK,命令如下:

  1. keytool -export -trustcacerts -alias casserver -file ./cas.cer -keystore ./keystore 
  2. sudo keytool -import -trustcacerts -alias casserver -file ./cas.cer -keystore /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home/lib/security/cacerts 

注意,在執(zhí)行 export 導(dǎo)出命令時(shí),需要輸入密鑰口令,這個(gè)口令就是自己一開始創(chuàng)建 SSL 證書時(shí)設(shè)置的。在執(zhí)行 import 導(dǎo)入命令時(shí),也需要輸入口令,這個(gè)口令是 changeit,注意,不是自己一開始設(shè)置的。

密鑰庫的位置在 JDK 目錄下的 /lib/security/cacerts,小伙伴們根據(jù)自己實(shí)際情況來修改(在 JDK9 之前,位置在 jre/lib/security/cacerts)。

我們?cè)诒镜販y(cè)試一定要導(dǎo)入證書到 JDK 證書庫中,否則后面的測(cè)試會(huì)出現(xiàn)上圖中的錯(cuò)誤,證書導(dǎo)入 JDK 證書庫之后,要確保之后的開發(fā)中,使用的是本地的 JDK。

注意,JDK 證書導(dǎo)入之后,CASServer 需要重啟一下。

1.3 修改 hosts

另外,我們還需要修改電腦 hosts 文件,因?yàn)榍懊骊P(guān)于 CAS Server,關(guān)于 SSL 證書的配置都涉及到域名,所以后面的訪問我們將通過域名的形式訪問,hosts 文件中添加如下兩條記錄:

第一個(gè)是 CAS Server 的請(qǐng)求域名,第二個(gè)是 CAS Client 的請(qǐng)求域名。

2.開發(fā) Client

在使用 Spring Security 開發(fā) CAS Client 之前,有一個(gè)基本問題需要先和小伙伴們捋清楚:用戶登錄是在 CAS Server 上登錄,所以 Spring Security 中雖然依舊存在用戶的概念,但是對(duì)于用戶的處理邏輯會(huì)和前面的有所不同。

好了,接下來我們來看下具體步驟。

首先我們來創(chuàng)建一個(gè)普通的 Spring Boot 項(xiàng)目,加入 Web 依賴 和 Spring Security 依賴,如下:

項(xiàng)目創(chuàng)建成功后,我們?cè)賮硎謩?dòng)加入 cas 依賴:

  1. <dependency> 
  2.     <groupId>org.springframework.security</groupId> 
  3.     <artifactId>spring-security-cas</artifactId> 
  4. </dependency> 

 

接下來,在 application.properties 中配置 CAS Server 和 CAS Client 的請(qǐng)求地址信息:

  1. cas.server.prefix=https://cas.javaboy.org:8443/cas 
  2. cas.server.login=${cas.server.prefix}/login 
  3. cas.server.logout=${cas.server.prefix}/logout 
  4.  
  5. cas.client.prefix=http://client1.cas.javaboy.org:8080 
  6. cas.client.login=${cas.client.prefix}/login/cas 
  7. cas.client.logoutRelative=/logout/cas 
  8. cas.client.logout=${cas.client.prefix}${cas.client.logoutRelative} 

這些配置都是自定義配置,所以配置的 key 可以自己隨意定義。至于配置的含義都好理解,分別配置了 CAS Server 和 CAS Client 的登錄和注銷地址。

配置好之后,我們需要將這些配置注入到實(shí)體類中使用,這里就用到了類型安全的屬性綁定。

這里我創(chuàng)建兩個(gè)類分別用來接收 CAS Server 和 CAS Client 的配置文件:

  1. @ConfigurationProperties(prefix = "cas.server"
  2. public class CASServerProperties { 
  3.     private String prefix; 
  4.     private String login; 
  5.     private String logout; 
  6.     //省略 getter/setter 
  7. @ConfigurationProperties(prefix = "cas.client"
  8. public class CASClientProperties { 
  9.     private String prefix; 
  10.     private String login; 
  11.     private String logoutRelative; 
  12.     private String logout; 
  13.     //省略 getter/setter 

另外記得在啟動(dòng)類上面添加 @ConfigurationPropertiesScan 注解來掃描這兩個(gè)配置類:

  1. @SpringBootApplication 
  2. @ConfigurationPropertiesScan 
  3. public class Client1Application { 
  4.  
  5.     public static void main(String[] args) { 
  6.         SpringApplication.run(Client1Application.class, args); 
  7.     } 

這里配置完成后,我們一會(huì)將在配置文件中來使用。

接下來創(chuàng)建 CAS 的配置文件,略長:

  1. @Configuration 
  2. public class CasSecurityConfig { 
  3.     @Autowired 
  4.     CASClientProperties casClientProperties; 
  5.     @Autowired 
  6.     CASServerProperties casServerProperties; 
  7.     @Autowired 
  8.     UserDetailsService userDetailService; 
  9.  
  10.     @Bean 
  11.     ServiceProperties serviceProperties() { 
  12.         ServiceProperties serviceProperties = new ServiceProperties(); 
  13.         serviceProperties.setService(casClientProperties.getLogin()); 
  14.         return serviceProperties; 
  15.     } 
  16.  
  17.     @Bean 
  18.     @Primary 
  19.     AuthenticationEntryPoint authenticationEntryPoint() { 
  20.         CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint(); 
  21.         entryPoint.setLoginUrl(casServerProperties.getLogin()); 
  22.         entryPoint.setServiceProperties(serviceProperties()); 
  23.         return entryPoint; 
  24.     } 
  25.  
  26.     @Bean 
  27.     TicketValidator ticketValidator() { 
  28.         return new Cas20ProxyTicketValidator(casServerProperties.getPrefix()); 
  29.     } 
  30.  
  31.     @Bean 
  32.     CasAuthenticationProvider casAuthenticationProvider() { 
  33.         CasAuthenticationProvider provider = new CasAuthenticationProvider(); 
  34.         provider.setServiceProperties(serviceProperties()); 
  35.         provider.setTicketValidator(ticketValidator()); 
  36.         provider.setUserDetailsService(userDetailService); 
  37.         provider.setKey("javaboy"); 
  38.         return provider; 
  39.     } 
  40.  
  41.     @Bean 
  42.     CasAuthenticationFilter casAuthenticationFilter(AuthenticationProvider authenticationProvider) { 
  43.         CasAuthenticationFilter filter = new CasAuthenticationFilter(); 
  44.         filter.setServiceProperties(serviceProperties()); 
  45.         filter.setAuthenticationManager(new ProviderManager(authenticationProvider)); 
  46.         return filter; 
  47.     } 
  48.  
  49.     @Bean 
  50.     SingleSignOutFilter singleSignOutFilter() { 
  51.         SingleSignOutFilter sign = new SingleSignOutFilter(); 
  52.         sign.setIgnoreInitConfiguration(true); 
  53.         return sign; 
  54.     } 
  55.     @Bean 
  56.     LogoutFilter logoutFilter() { 
  57.         LogoutFilter filter = new LogoutFilter(casServerProperties.getLogout(), new SecurityContextLogoutHandler()); 
  58.         filter.setFilterProcessesUrl(casClientProperties.getLogoutRelative()); 
  59.         return filter; 
  60.     } 

這個(gè)配置文件略長,但是并不難,我來和大家挨個(gè)解釋:

  1. 首先一進(jìn)來注入三個(gè)對(duì)象,這三個(gè)中,有兩個(gè)是我們前面寫的配置類的實(shí)例,另外一個(gè)則是 UserDetailsService,關(guān)于 UserDetailsService,我想我也不必多做解釋,大家參考本系列前面的文章就知道 UserDetailsService 的作用,一會(huì)我會(huì)給出 UserDetailsService 的實(shí)現(xiàn)。
  2. 接下來配置 ServiceProperties,ServiceProperties 中主要配置一下 Client 的登錄地址即可,這個(gè)地址就是在 CAS Server 上登錄成功后,重定向的地址。
  3. CasAuthenticationEntryPoint 則是 CAS 驗(yàn)證的入口,這里首先設(shè)置 CAS Server 的登錄地址,同時(shí)將前面的 ServiceProperties 設(shè)置進(jìn)去,這樣當(dāng)它登錄成功后,就知道往哪里跳轉(zhuǎn)了。
  4. TicketValidator 這是配置 ticket 校驗(yàn)地址,CAS Client 拿到 ticket 要去 CAS Server 上校驗(yàn),默認(rèn)校驗(yàn)地址是:https://cas.javaboy.org:8443/cas/proxyValidate?ticket=xxx
  5. CasAuthenticationProvider 主要用來處理 CAS 驗(yàn)證邏輯,關(guān)于 AuthenticationProvider 松哥在前面的文章中和大家分享過(SpringSecurity 自定義認(rèn)證邏輯的兩種方式(高級(jí)玩法)),當(dāng)時(shí)就說,想要自定義認(rèn)證邏輯,如短信登錄等,都可以通過擴(kuò)展 AuthenticationProvider 來實(shí)現(xiàn),這里的 CAS 登錄當(dāng)然也不例外,這里雖然設(shè)置了一個(gè) userDetailService,但是目的不是為了從數(shù)據(jù)庫中查詢數(shù)據(jù)做校驗(yàn),因?yàn)榈卿浭窃?CAS Server 中進(jìn)行的,這個(gè)的作用,我在后面會(huì)做介紹。
  6. CasAuthenticationFilter 則是 CAS 認(rèn)證的過濾器,過濾器將請(qǐng)求攔截下來之后,交由 CasAuthenticationProvider 來做具體處理。
  7. SingleSignOutFilter 表示接受 CAS Server 發(fā)出的注銷請(qǐng)求,所有的注銷請(qǐng)求都將從 CAS Client 轉(zhuǎn)發(fā)到 CAS Server,CAS Server 處理完后,會(huì)通知所有的 CAS Client 注銷登錄。
  8. LogoutFilter 則是配置將注銷請(qǐng)求轉(zhuǎn)發(fā)到 CAS Server。

接下來我再來給大家看下我定義的 UserDetailsService:

  1. @Component 
  2. @Primary 
  3. public class UserDetailsServiceImpl implements UserDetailsService{ 
  4.  
  5.     @Override 
  6.     public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { 
  7.         return new User(s, "123"truetruetruetrue
  8.                 AuthorityUtils.createAuthorityList("ROLE_user")); 
  9.     } 

既然是單點(diǎn)登錄,也就是用戶是在 CAS Server 上登錄的,這里的 UserDetailsService 意義在哪里呢?

用戶雖然在 CAS Server 上登錄,但是,登錄成功之后,CAS Client 還是要獲取用戶的基本信息、角色等,以便做進(jìn)一步的權(quán)限控制,所以,這里的 loadUserByUsername 方法中的參數(shù),實(shí)際上就是你從 CAS Server 上登錄成功后獲取到的用戶名,拿著這個(gè)用戶名,去數(shù)據(jù)庫中查詢用戶的相關(guān)信心并返回,方便 CAS Client 在后續(xù)的鑒權(quán)中做進(jìn)一步的使用,這里我為了方便,就沒有去數(shù)據(jù)庫中查詢了,而是直接創(chuàng)建了一個(gè) User 對(duì)象返回。

接下來,我們?cè)賮砜纯?Spring Security 的配置:

  1. @Configuration 
  2. public class SecurityConfig extends WebSecurityConfigurerAdapter { 
  3.     @Autowired 
  4.     AuthenticationEntryPoint authenticationEntryPoint; 
  5.     @Autowired 
  6.     AuthenticationProvider authenticationProvider; 
  7.     @Autowired 
  8.     SingleSignOutFilter singleSignOutFilter; 
  9.     @Autowired 
  10.     LogoutFilter logoutFilter; 
  11.     @Autowired 
  12.     CasAuthenticationFilter casAuthenticationFilter; 
  13.  
  14.     @Override 
  15.     protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
  16.         auth.authenticationProvider(authenticationProvider); 
  17.     } 
  18.  
  19.     @Override 
  20.     protected void configure(HttpSecurity http) throws Exception { 
  21.         http.authorizeRequests().antMatchers("/user/**"
  22.                 .hasRole("user"
  23.                 .antMatchers("/login/cas").permitAll() 
  24.                 .anyRequest().authenticated() 
  25.                 .and() 
  26.                 .exceptionHandling() 
  27.                 .authenticationEntryPoint(authenticationEntryPoint) 
  28.                 .and() 
  29.                 .addFilter(casAuthenticationFilter) 
  30.                 .addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class) 
  31.                 .addFilterBefore(logoutFilter, LogoutFilter.class); 
  32.     } 

這里的配置就簡單很多了:

  1. 首先配置 authenticationProvider,這個(gè) authenticationProvider 實(shí)際上就是一開始配置的 CasAuthenticationProvider。
  2. 接下來配置 /user/** 格式的路徑需要有 user 角色才能訪問,登錄路徑 /login/cas 可以直接訪問,剩余接口都是登錄成功之后才能訪問。
  3. 最后把 authenticationEntryPoint 配置進(jìn)來,再把自定義的過濾器加進(jìn)來,這些都比較容易我就不多說了。

最后,再提供兩個(gè)測(cè)試接口:

  1. @RestController 
  2. public class HelloController { 
  3.     @GetMapping("/hello"
  4.     public String hello() { 
  5.         return "hello"
  6.     } 
  7.     @GetMapping("/user/hello"
  8.     public String user() { 
  9.         return "user"
  10.     } 

OK ,如此之后,我們的 CAS Client 現(xiàn)在就開發(fā)完成了,接下來啟動(dòng) CAS Client,啟動(dòng)成功后,瀏覽器輸入 http://client1.cas.javaboy.org:8080/user/hello 訪問 hello 接口,此時(shí)會(huì)自動(dòng)跳轉(zhuǎn)到 CAS Server 上登錄,登錄成功之后,經(jīng)過兩個(gè)重定向,會(huì)重新回到 hello 接口。

3.小結(jié)

OK,這就是松哥和大家介紹的 Spring Security + CAS 單點(diǎn)登錄,當(dāng)然,這個(gè)案例中還有很多需要完善的地方,松哥會(huì)在后面的文章中繼續(xù)和大家分享完善的方案。

好了 ,本文就說到這里,本文相關(guān)案例我已經(jīng)上傳到 GitHub ,大家可以自行下載:https://github.com/lenve/spring-security-samples

本文轉(zhuǎn)載自微信公眾號(hào)「江南一點(diǎn)雨」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系江南一點(diǎn)雨公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2021-07-06 11:42:05

數(shù)據(jù)庫SpringSecurCAS

2021-05-08 10:44:35

SpringSecur登錄詳情

2021-07-13 14:05:37

單點(diǎn)登錄頁面

2021-06-29 12:27:19

Spring BootCAS 登錄

2012-12-03 13:54:15

IBMdW

2022-05-12 07:37:51

單點(diǎn)登錄微服務(wù)開源

2023-08-29 08:00:38

2021-04-21 10:38:44

Spring Boot RememberMe安全

2020-10-18 07:33:58

單點(diǎn)登錄cas-serverkeycloak

2021-05-12 10:39:51

SpringSecurity設(shè)備

2025-08-12 07:24:54

2024-03-07 09:20:16

2022-08-15 08:34:08

OauthCAS登錄

2016-12-26 18:05:00

單點(diǎn)登錄原理簡單實(shí)現(xiàn)

2020-12-28 05:52:27

SSO登錄單點(diǎn)

2013-10-16 15:17:30

vCenter單點(diǎn)登錄

2024-06-21 09:28:43

2012-08-07 09:04:46

單點(diǎn)登錄云安全云計(jì)算

2024-08-29 10:23:42

2021-05-27 07:12:19

單點(diǎn)登錄系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美在线视频二区| 久久麻豆精品| 亚洲一区国产一区| 亚洲一级电影视频| 欧美中文在线视频| 波多野结衣在线免费观看| 日本中文字幕在线免费观看| 深夜成人福利| 国产精品一级二级三级| 亚洲欧美日韩在线高清直播| 国产午夜精品视频一区二区三区| 麻豆成人免费视频| 超碰在线一区| 亚洲免费观看高清完整版在线观看 | gogo大胆日本视频一区| 中文字幕一区日韩电影| 激情综合在线观看| av综合在线观看| 色135综合网| 在线亚洲免费视频| 麻豆亚洲一区| 91精品国产乱码在线观看| 国产精品欧美日韩一区| 欧美日韩国产在线看| 91在线播放视频| 性生交大片免费全黄| 色天使综合视频| 久久久久国产免费免费 | 久久久福利视频| 久久久久亚洲AV| 国产精品白丝久久av网站| 日本一区二区免费在线| 欧美一级大片在线免费观看| 漂亮人妻被黑人久久精品| 污污网站在线观看| 青青草成人影院| 日本道色综合久久| 日本最新一区二区三区视频观看| 久久久久久久久久久影院| 亚洲制服欧美另类| 欧美性xxxxhd| 三级三级久久三级久久18| 久久久久亚洲视频| 精品视频国产| 欧美精品色一区二区三区| 永久免费精品视频网站| 国产a级免费视频| 蜜臀久久99精品久久久久久9 | 亚洲精品白浆| 中文字幕亚洲视频| 欧美专区国产专区| 久一视频在线观看| 综合久久久久| 亚洲白拍色综合图区| 久久久久免费看黄a片app| 天堂а在线中文在线无限看推荐| 性一交一乱一区二区洋洋av| 国内揄拍国内精品| 美女伦理水蜜桃4| 韩国美女久久| 亚洲欧洲成人精品av97| 亚洲国产精品一区在线观看不卡| 97精品久久人人爽人人爽| 香蕉久久网站| 亚洲精品久久7777777| 日韩中文字幕二区| 黄色成人影院| 成人综合婷婷国产精品久久免费| 午夜精品福利视频| 国产精品酒店视频| 超碰成人福利| 亚洲国产精品系列| 一女三黑人理论片在线| 青青伊人久久| 五月婷婷激情综合| 美脚丝袜一区二区三区在线观看| 视频在线观看你懂的| 91麻豆免费视频| 亚洲直播在线一区| 国产精品视频一区在线观看| 美女精品在线| 欧美激情一区二区三区在线视频观看 | 在线观看日韩片| 成人免费视屏| 2014亚洲片线观看视频免费| 国产欧美一区二区三区在线| 国产网友自拍视频| 91中文字幕精品永久在线| xvideos国产精品| 右手影院亚洲欧美| 91麻豆精品激情在线观看最新| 精品国产百合女同互慰| 亚洲第一黄色网址| 91麻豆精品国产91久久久久推荐资源| 亚洲精品99久久久久中文字幕| 91中文字幕永久在线| 凹凸av导航大全精品| 国产视频一区在线| 怡红院一区二区| 欧美不卡在线观看| 精品视频一区二区三区免费| 国产aaa一级片| 97在线超碰| 亚洲猫色日本管| 成熟丰满熟妇高潮xxxxx视频| 2020国产在线视频| 中文字幕日韩av资源站| a级免费在线观看| www免费视频观看在线| 午夜精品久久久久久久久久| 777视频在线| 户外露出一区二区三区| 91精品免费观看| 亚洲精品手机在线观看| julia一区二区三区中文字幕| 精品久久久久久久久久| 五月婷婷之综合激情| 午夜伦理福利在线| 亚洲国产成人av好男人在线观看| 400部精品国偷自产在线观看| 亚洲成人三级| 国产精品久久777777| 91免费黄视频| 黄色视屏在线免费观看| 亚洲电影一区二区三区| www.精品在线| 美女少妇全过程你懂的久久| 国产午夜精品免费一区二区三区 | 国产精品怡红院| 久久66热re国产| 国产精品爽黄69天堂a| 中文字幕 日韩有码| 麻豆精品国产传媒mv男同 | 涩爱av色老久久精品偷偷鲁| 日韩欧美电影在线| 动漫美女无遮挡免费| 99成人超碰| 欧美大片在线影院| 亚洲国产精一区二区三区性色| 亚洲黄色av| 日韩av高清不卡| 在线观看免费视频一区| 国产乱色国产精品免费视频| 日韩一区免费观看| 欧美二三四区| 亚洲乱码一区av黑人高潮| 日韩欧美亚洲视频| 成人av网站免费观看| 欧美xxxx黑人又粗又长密月| 18video性欧美19sex高清| 日韩欧美一级精品久久| 少妇aaaaa| 伊人成人在线视频| 国产精品扒开腿做| 精品人妻一区二区三区含羞草| av在线播放一区二区三区| 日韩成人手机在线| 成人在线爆射| 亚洲三级 欧美三级| 亚洲a∨无码无在线观看| 日韩电影在线一区二区| 91九色偷拍| 中国av在线播放| 欧美xxxxx牲另类人与| 亚洲乱码国产乱码精品精大量 | 久久精品香蕉视频| 狠狠做深爱婷婷综合一区| 国产精品第一页在线| av在线中文| 亚洲国产视频一区| av电影在线播放| 国产农村妇女精品一二区| 精品伦理一区二区三区| 在线日本视频| 欧美午夜激情在线| wwwwxxxx国产| 免费成人在线观看| 男人天堂成人网| 96sao在线精品免费视频| 97色在线观看| 成人精品一区二区三区免费| 6080日韩午夜伦伦午夜伦| 国产精选第一页| 久久精品人人做| av在线播放天堂| 亚洲调教一区| 91麻豆国产语对白在线观看| 男同在线观看| 亚洲成a天堂v人片| 大黑人交xxx极品hd| 日本欧美一区二区在线观看| 精品视频一区二区| 亚洲成人av观看| 亚洲老头同性xxxxx| 中文在线资源天堂| 一区二区三区欧美日韩| 午夜在线观看av| 欧美日韩综合| 亚洲一区二区久久久久久| 91九色porn在线资源| 伊人伊成久久人综合网站| 青青青国产在线| 成人欧美一区二区三区1314| 欧亚乱熟女一区二区在线| 免费av网站大全久久| 欧美亚洲日本一区二区三区| 日韩免费视频| 久久国产欧美精品| 国产精品麻豆| 国产精品高精视频免费| xxxx另类黑人| 亚洲国产婷婷香蕉久久久久久| 中文字幕欧美人妻精品| 五月综合激情日本mⅴ| 日本高清不卡免费| 精品一区二区三区免费| 欧美视频在线观看网站| 国产精品久久久久无码av| 精品视频一区二区| 日韩免费一级| 成人观看高清在线观看免费| 免费看a在线观看| 这里只有精品免费| 潘金莲一级淫片aaaaaa播放| 国产欧美在线观看一区| 精品人妻在线视频| 国产精品538一区二区在线| 大胆欧美熟妇xx| 欧美电影免费| 色999五月色| 中文字幕av一区二区三区人| 国产精品一 二 三| 懂色av一区| 超碰97人人做人人爱少妇| 国产丰满果冻videossex| 欧美自拍偷拍一区| 永久免费无码av网站在线观看| 香蕉久久一区二区不卡无毒影院| 欧美成人免费观看视频 | 亚洲一区二区三区四区av| 精品综合免费视频观看| 污片在线免费看| 欧美aaaaa成人免费观看视频| 黄色一级大片在线观看| 久久久久欧美精品| 91黄色小网站| 久久久久一区| 日韩av片网站| 免费美女久久99| 女人另类性混交zo| 久热国产精品| 亚洲精品自在在线观看| 国产精品美女久久久久久不卡| 欧美一区二区视频17c| 一本色道久久综合亚洲精品酒店| 欧美日韩国产综合视频在线| 伊人亚洲精品| 国产做受高潮69| 国产嫩草在线视频| 性欧美视频videos6一9| 女人让男人操自己视频在线观看 | 欧美亚洲一区二区在线观看| 中文字幕人妻一区二| 亚洲嫩草精品久久| 久久99久久久| 国产精品三级av在线播放| 国产精品嫩草69影院| 久久在线精品| 久久久久免费精品| 欧美久久综合| 人妻夜夜添夜夜无码av| 亚洲一区亚洲| 福利在线一区二区三区| 激情综合亚洲| 欧美变态另类刺激| 日韩av中文在线观看| 最新天堂在线视频| 国产成人精品aa毛片| 亚洲精品自拍网| 国内不卡的二区三区中文字幕| 成年人视频在线免费| 青青草97国产精品免费观看| 国产美女视频免费看| 天堂久久一区二区三区| 9久久婷婷国产综合精品性色| 精品一区二区三区不卡 | 欧美精品情趣视频| 国产福利免费在线观看| 亚洲精品mp4| 国产黄色免费在线观看| 欧美成人午夜影院| 亚洲最大网站| 亚洲aⅴ男人的天堂在线观看| 国产精品乱战久久久| 成人免费91在线看| 国产成年精品| 久久综合九色综合久99| 999久久久亚洲| 国产精品一区二区免费在线观看| 蜜臀av一区二区在线观看| 久久久久亚洲av成人网人人软件| 国产偷v国产偷v亚洲高清| 久草国产在线观看| 欧美亚洲精品一区| 手机在线观看免费av| 日韩欧美一区二区免费| 日本一区二区三区在线观看视频| 亚洲精品国产综合久久| 老司机午夜在线视频| 欧美一级电影久久| 一区视频网站| 国产精品果冻传媒潘| 日本久久黄色| 国产超级av在线| 粉嫩在线一区二区三区视频| 五月天免费网站| 1024亚洲合集| 日本视频在线观看免费| 精品精品国产高清a毛片牛牛| 成年人在线视频| 欧美一级大片在线观看| 一区二区免费| 只有这里有精品| 日韩 欧美一区二区三区| 少妇被狂c下部羞羞漫画| 亚洲视频中文字幕| 久久99久久98精品免观看软件| 欧美丝袜丝交足nylons图片| 日韩在线免费看| 欧美精品福利在线| 国产日韩一区二区三免费高清| 日韩欧美第二区在线观看| 午夜在线精品偷拍| 91丨porny丨对白| 亚洲国产一区视频| 国产成人av免费看| 麻豆乱码国产一区二区三区| 欧美成人毛片| 92国产精品视频| 日韩欧美精品| 在线观看免费视频高清游戏推荐 | 日韩在线一卡二卡| 欧美性一二三区| www.久久热.com| 国产精品91久久久| 人人精品久久| 亚洲精品影院| 极品美女销魂一区二区三区| 国产日产在线观看| 欧美色国产精品| 色老头视频在线观看| 成人精品网站在线观看| 偷拍欧美精品| 国产农村妇女精品久久| 99久精品国产| 在线免费看视频| 欧美日韩另类一区| 丰满岳乱妇国产精品一区| 亚洲精品网站在线播放gif| 午夜伦理福利在线| 区一区二区三区中文字幕| 日韩电影在线观看电影| 在线免费看视频| 日韩亚洲欧美在线| 日韩欧美亚洲系列| 热re99久久精品国产66热| 欧美精品乱码| aaa一级黄色片| 亚洲曰韩产成在线| 亚洲一区二区三区网站| 精品国产一区二区三区久久狼黑人| 久久69av| 免费看国产一级片| 国产欧美日产一区| 国产精品无码在线播放| 久久久久久久爱| 免费看日本一区二区| gogogo高清免费观看在线视频| 亚洲视频一区二区在线| 日韩在线观看视频网站| 久久久国产精品一区| 欧美在线你懂的| 免费又黄又爽又色的视频| 亚洲第一精品夜夜躁人人爽| 青青草免费观看免费视频在线| 国产精品91在线观看| 91精品国产成人观看| 91传媒理伦片在线观看| 色综合久久88色综合天天6| 亚洲成人av综合| 日韩在线播放视频| 亚洲一区二区三区中文字幕在线观看| 国产伦精品一区二区三区四区视频_| 国产亚洲精品aa| 精品久久人妻av中文字幕| 欧美壮男野外gaytube| 图片小说视频色综合| 日本japanese极品少妇| 69堂精品视频| 亚洲精品一级二级|