日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

springboot集成CAS實現單點登錄的示例代碼

瀏覽:27日期:2023-05-09 18:49:43

最近新參與的項目用到了cas單點登錄,我還不會,這怎么能容忍!空了學習并搭建了一個spring-boot 集成CAS 的demo。實現了單點登錄與登出。

單點登錄英文全稱是:Single Sign On,簡稱SSO。含義:在多個相互信任的系統中,只要登錄一個系統其他系統均可訪問。

CAS 是一種使用廣泛的單點登錄實現,分為客戶端CAS Client和服務端 CAS Service,客戶端就是我們的系統,服務端是認證中心,由CAS提供,我們需要稍作修改,啟動起來就可以用。~~~~

springboot集成CAS實現單點登錄的示例代碼

效果演示

springboot集成CAS實現單點登錄的示例代碼

https證書

CAS Service 需要用https的方式,那么就需要證書,可以買也可以自己生成一個。其實這一步也可以省略,訪問的時候使用http即可,只是cas 會給警告。

步驟和把大象裝進冰箱一樣簡單,總共三步:

生成密鑰 生成證書 導入證書

1. 生成密鑰

keytool -genkey -alias cainiao -keyalg RSA -keystore E:sslcainiao.keystore

參數說明:

-genkey 生成密鑰 -keyalg 指定密鑰算法,這時指定RSA -alias 指定別名 -keystore 指定密鑰庫存儲位置,這里存在 E:/ssl/目錄下

在執行中會問你很多問題,當問到 :您的名字與姓氏是什么?此時需要填寫域名,作為之后的訪問地址,其他隨意。執行完后生成一個密鑰文件 cainiao.keystore

2. 生成證書

keytool -export -alias cainiao -storepass 123456 -file E:/ssl/cainiao.cer -keystore E:/ssl/cainiao.keystore

參數說明:

-storepass 剛剛生成密鑰文件時候的設置的密碼-file指定導出證書的文件名為cainiao.cer-keystore指定之前生成的密鑰文件的文件名

執行完后目錄下會生成一個cainiao.cer證書

3. 導入證書

keytool -import -alias cainiao -keystore C:/'Program Files'/Java/jdk1.8.0_181/jre/lib/security/cacerts -file E:/ssl/cainiao.cer -trustcacerts

將證書導入到JDK信任庫把原來的$JAVA_HOME/jre/lib/security/cacerts文件要先刪掉,否則會報出 Keystore was tampered with, or password was incorrect.

下面是整個過程:

PS E:ssl> keytool -genkey -alias cainiao -keyalg RSA -keystore E:sslcainiao.keystore輸入密鑰庫口令:再次輸入新口令:您的名字與姓氏是什么? [Unknown]: www.cainiao.com您的組織單位名稱是什么? [Unknown]: cainian您的組織名稱是什么? [Unknown]: cainiao您所在的城市或區域名稱是什么? [Unknown]: wx您所在的省/市/自治區名稱是什么? [Unknown]: js該單位的雙字母國家/地區代碼是什么? [Unknown]: CNCN=www.cainiao.com, OU=cainian, O=cainiao, L=wx, ST=js, C=CN是否正確? [否]: y輸入 <cainiao> 的密鑰口令 (如果和密鑰庫口令相同, 按回車):再次輸入新口令:------------------------------------------------------------------------------------PS E:ssl> keytool -export -alias cainiao -storepass 123456 -file E:/ssl/cainiao.cer -keystore E:/ssl/cainiao.keystore存儲在文件 <E:/ssl/cainiao.cer> 中的證書------------------------------------------------------------------------------------PS E:ssl> keytool -import -alias cainiao -keystore C:/'Program Files'/Java/jdk1.8.0_181/jre/lib/security/cacerts -file E:/ssl/cainiao.cer -trustcacerts輸入密鑰庫口令:所有者: CN=www.cainiao.com, OU=cainian, O=cainiao, L=wx, ST=js, C=CN發布者: CN=www.cainiao.com, OU=cainian, O=cainiao, L=wx, ST=js, C=CN序列號: 509d1aea有效期為 Wed Jun 17 22:02:55 CST 2020 至 Tue Sep 15 22:02:55 CST 2020證書指紋: MD5: 5B:B2:7C:D7:B7:31:C5:7C:1C:BC:F7:DA:A8:2D:1C:B2 SHA1: F6:76:55:55:D7:48:E3:9F:3A:B6:EE:68:1F:BE:DC:DE:51:B1:33:E5 SHA256: 24:53:18:CD:E8:95:65:D8:6E:6A:7B:8E:79:CB:91:BD:F4:2E:C3:99:59:D1:76:12:A8:95:45:2A:4B:03:E4:AD簽名算法名稱: SHA256withRSA主體公共密鑰算法: 2048 位 RSA 密鑰版本: 3擴展:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 70 B3 D5 76 36 EA 54 BA 75 C1 A1 5C DA 76 82 0E p..v6.T.u...v..0010: 4D F4 C9 05 M...]]是否信任此證書? [否]: y證書已添加到密鑰庫中

最后,hosts 配置 127.0.0.1 www.cainiao.com

搭建CAS service

需要從github上拉取模板 https://github.com/apereo/cas-overlay-template5.3之后的都是gradle項目,5.3以之前都是maven 項目,我下載5.3版本的。

1.> 把pom 里面的<repositories>倉庫地址去掉,國外的倉庫地址比較慢。你懂得。2.> 在根目錄下建/src/main/resources目錄3.> 將生成的密鑰文件復制到/src/main/resources目錄下4.> 將overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/application.properties文件復制到第二步建的目錄下。5.> 修改復制過來的/src/main/resources/application.properties文件,根據上面的證書信息如實填寫。

server.ssl.key-store=classpath:cainiao.keystoreserver.ssl.key-store-password=123456server.ssl.key-password=123456

6.> 連接mysql數據庫,在pom 中添加依賴

<dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>${cas.version}</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version></dependency>

或許你會發現有個xmlsectool-2.0.0.jar包下不下來,這是阿里云的倉庫沒有,需要到maven中央倉庫下載,后安裝到本地倉庫,可不是直接放到本地倉庫,jar包都是必須使用命令安裝到本地倉庫。

mvn install:install-file -Dfile='E:下載xmlsectool-2.0.0.jar' '-DgroupId=net.shibboleth.tool' '-DartifactId=xmlsectool' '-Dversion=2.0.0' '-Dpackaging=jar'

安裝jar包到本地倉庫筆記

7.> 在復制過來的/src/main/resources/application.properties文件中在添加如下信息

#查詢賬號密碼sql,必須包含密碼字段cas.authn.jdbc.query[0].sql=select * from sys_user where username=?#指定上面的sql查詢字段名(必須)cas.authn.jdbc.query[0].fieldPassword=password#指定過期字段,1為過期,若過期需要修改密碼cas.authn.jdbc.query[0].fieldExpired=expired#為不可用字段段,1為不可用,cas.authn.jdbc.query[0].fieldDisabled=disabled#數據庫方言hibernate的知識cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect#數據庫驅動cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver#數據庫連接 cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8#數據庫用戶名cas.authn.jdbc.query[0].user=root#數據庫密碼cas.authn.jdbc.query[0].password=123456#默認加密策略,通過encodingAlgorithm來指定算法,默認NONE不加密cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULTcas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

附上數據庫sql,用戶信息表

-- ------------------------------ Table structure for sys_user-- ----------------------------DROP TABLE IF EXISTS `sys_user`;CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `expired` int(11) DEFAULT NULL, `disabled` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of sys_user-- ----------------------------INSERT INTO `sys_user` VALUES (’1’, ’admin’, ’21232f297a57a5a743894a0e4a801fc3’, ’0’, ’1’);INSERT INTO `sys_user` VALUES (’2’, ’cainiao’, ’6b757206058785025cd90c8d865c8e43’, ’1’, ’0’);INSERT INTO `sys_user` VALUES (’3’, ’mashu’, ’d1f21ceb3f710ebbd9f408274aee1193’, ’0’, ’0’);

用戶名和密碼一樣,密碼在數據庫中是MD5加密的。這樣就完成了CAS service 的搭建,在根目錄使用 build.cmd run 命令啟動出現 READY 的branner就啟動好了 訪問地址 https://www.cainiao.com:8443/cas/login

springboot集成CAS實現單點登錄的示例代碼

mashu正常登錄,cainiao需要修改密碼,admin被禁用,符合預期。

搭建CAS client

創建一個spring boot 項目.1.加入cas 客戶端 的依賴, 我選擇目前最新的 2.3.0-GA 版本

<dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>2.3.0-GA</version> </dependency>

2.在啟動類上加上注解 @EnableCasClient3.在application.properties中添加配置

#cas服務端的地址cas.server-url-prefix=https://www.cainiao.com:8443/cas#cas服務端的登錄地址cas.server-login-url=https://www.cainiao.com:8443/cas/login#客戶端訪問地址cas.client-host-url=http://www.mashu.com:8080cas.validation-type=CAS3

4.添加hosts 配置,把客戶端的訪問地址配置到hosts

127.0.0.1 www.mashu.com

這樣就客戶端就配置好了。

單點登錄

我寫一個controller,訪問一下。

@RestControllerpublic class TestController { @RequestMapping('/hello') public String hello() { return 'word'; }}

訪問 http://www.mashu.com:8080/hello

未認證授權的服務

喜提報錯:

springboot集成CAS實現單點登錄的示例代碼

原因是服務端不允許客戶端的http協議的請求。需要對服務端做以下修改,讓他妥協。1.>修改overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json文件

'serviceId' 由原來的'^(https|imaps)://.*'改成 '^(https|imaps|http)://.*'

2.>在application.properties文件中添加:

#允許httpcas.tgc.secure=falsecas.serviceRegistry.initFromJson=true

再次訪問 http://www.mashu.com:8080/hello,可以看到已經帶著地址轉發到服務端的登錄頁。

springboot集成CAS實現單點登錄的示例代碼

輸入賬號密碼mashu/mashu,登錄成功后又回來了!哈哈哈哈嗝,并攜帶了登錄憑證。

springboot集成CAS實現單點登錄的示例代碼

多系統登錄

再啟動一個客戶端,打開idea 的edit configurations設置。勾選 Allow parallel run

springboot集成CAS實現單點登錄的示例代碼

修改application.properties,服務的端口等信息,再點擊啟動,就可以同時啟動了(8081/8080)兩個客戶端

server.port=8081#cas服務端的地址cas.server-url-prefix=https://www.cainiao.com:8443/cas#cas服務端的登錄地址cas.server-login-url=https://www.cainiao.com:8443/cas/login#客戶端訪問地址cas.client-host-url=http://www.mshu.com:8081cas.validation-type=CAS3

訪問第二個客戶端 http://www.mshu.com:8081/hello,(需要先配置host),就直接登錄了,到此完成了單點登錄。

springboot集成CAS實現單點登錄的示例代碼

點單登出添加兩個配置文件;

1. CasProperties.java

import org.springframework.boot.context.properties.ConfigurationProperties;import javax.validation.constraints.NotNull;@ConfigurationProperties(prefix = 'cas',ignoreUnknownFields = true)public class CasProperties { /** * CAS server URL E.g. https://example.com/cas or https://cas.example. Required. * CAS 服務端 url 不能為空 */ @NotNull private String serverUrlPrefix; /** * CAS server login URL E.g. https://example.com/cas/login or https://cas.example/login. Required. * CAS 服務端登錄地址 上面的連接 加上/login 該參數不能為空 */ @NotNull private String serverLoginUrl; /** * CAS-protected client application host URL E.g. https://myclient.example.com Required. * 當前客戶端的地址 */ @NotNull private String clientHostUrl; /** * 忽略規則,訪問那些地址 不需要登錄 */ private String ignorePattern; /** * 自定義UrlPatternMatcherStrategy驗證 */ private String ignoreUrlPatternType; public String getServerUrlPrefix() { return serverUrlPrefix; } public void setServerUrlPrefix(String serverUrlPrefix) { this.serverUrlPrefix = serverUrlPrefix; } public String getServerLoginUrl() { return serverLoginUrl; } public void setServerLoginUrl(String serverLoginUrl) { this.serverLoginUrl = serverLoginUrl; } public String getClientHostUrl() { return clientHostUrl; } public void setClientHostUrl(String clientHostUrl) { this.clientHostUrl = clientHostUrl; } public String getIgnorePattern() { return ignorePattern; } public void setIgnorePattern(String ignorePattern) { this.ignorePattern = ignorePattern; } public String getIgnoreUrlPatternType() { return ignoreUrlPatternType; } public void setIgnoreUrlPatternType(String ignoreUrlPatternType) { this.ignoreUrlPatternType = ignoreUrlPatternType; }}

2. Configs.java

import org.jasig.cas.client.authentication.AuthenticationFilter;import org.jasig.cas.client.session.SingleSignOutFilter;import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;import org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.EventListener;import java.util.HashMap;import java.util.Map;@Configuration@EnableConfigurationProperties(CasProperties.class)public class Configs { @Autowired private CasProperties configProps; /** * 配置登出過濾器 * @return */ @Bean public FilterRegistrationBean filterSingleRegistration() { final FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new SingleSignOutFilter()); // 設定匹配的路徑 registration.addUrlPatterns('/*'); Map<String,String> initParameters = new HashMap<String, String>(); initParameters.put('casServerUrlPrefix', configProps.getServerUrlPrefix()); registration.setInitParameters(initParameters); // 設定加載的順序 registration.setOrder(1); return registration; } /** * 配置過濾驗證器 這里用的是Cas30ProxyReceivingTicketValidationFilter * @return */ @Bean public FilterRegistrationBean filterValidationRegistration() { final FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter()); // 設定匹配的路徑 registration.addUrlPatterns('/*'); Map<String,String> initParameters = new HashMap<String, String>(); initParameters.put('casServerUrlPrefix', configProps.getServerUrlPrefix()); initParameters.put('serverName', configProps.getClientHostUrl()); initParameters.put('useSession', 'true'); registration.setInitParameters(initParameters); // 設定加載的順序 registration.setOrder(2); return registration; } /** * 配置授權過濾器 * @return */ @Bean public FilterRegistrationBean filterAuthenticationRegistration() { final FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new AuthenticationFilter()); // 設定匹配的路徑 registration.addUrlPatterns('/*'); Map<String,String> initParameters = new HashMap<String, String>(); initParameters.put('casServerLoginUrl', configProps.getServerLoginUrl()); initParameters.put('serverName', configProps.getClientHostUrl()); if(configProps.getIgnorePattern() != null && !''.equals(configProps.getIgnorePattern())){ initParameters.put('ignorePattern', configProps.getIgnorePattern()); } //自定義UrlPatternMatcherStrategy 驗證規則 if(configProps.getIgnoreUrlPatternType() != null && !''.equals(configProps.getIgnoreUrlPatternType())){ initParameters.put('ignoreUrlPatternType', configProps.getIgnoreUrlPatternType()); } registration.setInitParameters(initParameters); // 設定加載的順序 registration.setOrder(3); return registration; } /** * request wraper過濾器 * @return */ @Bean public FilterRegistrationBean filterWrapperRegistration() { final FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new HttpServletRequestWrapperFilter()); // 設定匹配的路徑 registration.addUrlPatterns('/*'); // 設定加載的順序 registration.setOrder(4); return registration; } /** * 添加監聽器 * @return */ @Bean public ServletListenerRegistrationBean<EventListener> singleSignOutListenerRegistration(){ ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<EventListener>(); registrationBean.setListener(new SingleSignOutHttpSessionListener()); registrationBean.setOrder(1); return registrationBean; }}

登出地址: https://www.cainiao.com:8443/cas/logout,退出服務端。再次訪問客戶端發現自動跳到了登錄頁面,即客戶端也自動退出成功。

springboot集成CAS實現單點登錄的示例代碼

一些問題

最開始我想把客戶端也加一個證書,用https訪問。免得在服務端做修改去支持http, 當我添加證書后,單點登錄正常,但是登出功能總是失敗,表現為服務端退出,客戶端沒有退出。我一直以為客戶端配置的登出有問題,搞了半天都沒成功,后來我把客戶端的證書去掉,就成功了。想了想大概是因為我們自己生成的證書不能被服務端認可,因為登出的時候需要服務端向客戶端發起廣播,而我們之前修改的HTTPSandIMAPS-10000001.json文件只是作用于客戶端向服務端的請求。和登出相反。

在我使用springboot配置證書的時候,2.1.0.RELEASE以上版本的spring-boot-starter-parent都不行。會報錯。

到此這篇關于springboot集成CAS實現單點登錄的示例代碼的文章就介紹到這了,更多相關springboot集成CAS單點登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
不卡中文字幕| 国产精品天堂蜜av在线播放| 欧美视频久久| 噜噜噜久久亚洲精品国产品小说| а√天堂中文在线资源8| 麻豆传媒一区二区三区| 另类欧美日韩国产在线| 91福利精品在线观看| 一区二区国产在线| 中文字幕日韩亚洲| 青青在线精品| 樱桃视频成人在线观看| 亚洲播播91| 国产高清一区二区| 亚洲欧美网站| 69堂免费精品视频在线播放| 国产精品久av福利在线观看| 国产成人精选| 伊人精品一区| 中文字幕日韩亚洲| 国产第一亚洲| 欧美另类综合| 蜜桃视频免费观看一区| 欧美偷窥清纯综合图区| 国产一区二区三区网| 亚洲手机视频| 日韩高清在线观看一区二区| 国产精品一级在线观看| 日韩免费福利视频| 亚久久调教视频| 色在线视频观看| 日韩欧美中文字幕在线视频| 麻豆视频一区二区| 亚洲深夜影院| 亚洲精品2区| 国精品一区二区三区| 国产精品字幕| 亚洲精品电影| 国产精品中文字幕制服诱惑| 美女精品久久| 日本大胆欧美人术艺术动态| 国产在线视频欧美一区| 视频一区日韩精品| 日韩电影在线视频| 青青草91视频| 日韩中文字幕麻豆| 深夜视频一区二区| 国产精品黄网站| 亚洲精品高潮| 99riav1国产精品视频| sm捆绑调教国产免费网站在线观看 | 欧美天堂一区二区| 欧美午夜不卡影院在线观看完整版免费| 欧美亚洲一区二区三区| 国产精品一线天粉嫩av| 亚洲精品亚洲人成在线观看| 99久久精品国产亚洲精品| 国产传媒在线观看| 国产精品大片| 国产乱码精品| 欧美一区激情| 奇米亚洲欧美| 欧美久久香蕉| 欧美日韩一区二区国产| 国产精品av久久久久久麻豆网| 在线中文字幕播放| 国产白浆在线免费观看| 色综合五月天| 99久精品视频在线观看视频| 亚洲高清毛片| 日韩中文字幕一区二区三区| 亚洲香蕉视频| 国产伦理久久久久久妇女| 精品国产91| 欧美高清一区| 一区二区亚洲视频| 日韩黄色av| 色婷婷色综合| 亚洲精品1区| 免费人成网站在线观看欧美高清| 亚洲精品极品少妇16p| 国产一区导航| 国产欧美日韩一区二区三区四区| 精品久久久久中文字幕小说| 日韩不卡在线| 日本成人手机在线| 欧美一级鲁丝片| 老司机精品久久| 国产精选久久| 99香蕉国产精品偷在线观看 | 日韩美女一区二区三区在线观看| 香蕉久久99| 亚洲人成毛片在线播放女女| 日韩国产在线一| 91视频一区| 中文字幕中文字幕精品| 国产精品精品| 日韩欧美高清一区二区三区| 成人片免费看| 日韩不卡在线观看日韩不卡视频| 成人美女视频| 国产精品乱战久久久| 免播放器亚洲一区| 中文字幕系列一区| 日韩av一级片| 99视频在线精品国自产拍免费观看| 国产精品乱战久久久| 高清av一区二区三区| 国产精品chinese| 亚洲精品一区二区在线播放∴| 水蜜桃久久夜色精品一区的特点 | 亚洲大片在线| 波多野结衣久久精品| 91久久精品无嫩草影院| 99国产精品免费视频观看| 久久国产乱子精品免费女| 黑丝一区二区| 久久蜜桃av| 欧美不卡高清一区二区三区| 美女久久久久久| 日韩精品免费观看视频| 夜夜精品视频| 好看的av在线不卡观看| 欧美日韩国产传媒| 日韩一区二区三区在线免费观看| 久久精品三级| 成人午夜在线| 麻豆高清免费国产一区| 国产欧美一区二区三区精品观看| 亚洲欧美日本国产| 综合欧美精品| 18国产精品| 国产一区精品福利| а√天堂8资源中文在线| 日韩中文在线电影| 国产 日韩 欧美一区| 国产精品二区影院| 精品视频在线观看网站| 成人在线观看免费视频| 日韩免费小视频| 欧美日韩四区| 日韩一区中文| 欧美精品中文| а√在线中文在线新版| 国产综合婷婷| 欧美精品国产| 日韩久久视频| 久久99伊人| 国产乱子精品一区二区在线观看 | 国产成人精品福利| 久久国产中文字幕| 亚洲日本免费电影| 久久免费视频66| 国产99精品| 国产午夜精品一区在线观看| 久久亚洲人体| 午夜欧美理论片| 国产精品国码视频| 欧美精品一区二区三区精品| 日韩精品第一| 日本а中文在线天堂| 尹人成人综合网| 日韩精品高清不卡| 99久久九九| 欧美在线日韩| 亚洲午夜精品久久久久久app| 日韩成人精品一区二区三区| 私拍精品福利视频在线一区| 亚洲精品日本| 婷婷综合激情| 国产精品一区二区av日韩在线| 欧美日中文字幕| 国产精品v一区二区三区| 亚洲深夜福利| 亚洲欧洲美洲av| 国产精品一区二区av交换 | 在线看片日韩| 久久中文视频| 97欧美在线视频| 国产亚洲欧美日韩在线观看一区二区| 亚洲少妇在线| 在线日韩电影| 91精品一区国产高清在线gif| 美腿丝袜亚洲一区| 欧美日韩一区二区三区在线电影| 日韩午夜精品| 亚洲激情五月| 国产一区二区高清| 亚州av乱码久久精品蜜桃| 成人在线视频区| 欧美成a人片免费观看久久五月天| 日产欧产美韩系列久久99| 国产亚洲永久域名| 亚洲免费一区二区| 91精品二区| 亚洲国产日韩欧美在线| 亚洲小说欧美另类婷婷| 亚洲成人av观看| 亚洲精品中文字幕乱码| 九九在线精品|