亚洲天堂中文字幕在线,亚洲AV无码成人精品区日韩,亚洲成av人片在线天堂无http://m.tkk7.com/xinge/zh-cnMon, 12 May 2025 01:20:32 GMTMon, 12 May 2025 01:20:32 GMT60Grails項(xiàng)目與CAS、GWT集成配置指南(上)http://m.tkk7.com/xinge/archive/2008/07/17/215353.html星哥星哥Wed, 16 Jul 2008 17:40:00 GMThttp://m.tkk7.com/xinge/archive/2008/07/17/215353.htmlhttp://m.tkk7.com/xinge/comments/215353.htmlhttp://m.tkk7.com/xinge/archive/2008/07/17/215353.html#Feedback1http://m.tkk7.com/xinge/comments/commentRss/215353.htmlhttp://m.tkk7.com/xinge/services/trackbacks/215353.html
    最近在用Grails框架開(kāi)發(fā)一個(gè)Web應(yīng)用系統(tǒng),需要與已有的異構(gòu)Web系統(tǒng)實(shí)現(xiàn)單點(diǎn)登錄的效果,同時(shí)為了增加程序的用戶體驗(yàn)要用到AJAX技術(shù),因此在系統(tǒng)中集成了CAS和GWT插件,并在GWT插件中加入了GWT-EXT庫(kù)。本文的目的是給出各種配置細(xì)節(jié),為有做同樣開(kāi)發(fā)興趣的朋友提供一些借鑒,少走彎路提高效率。

一、Grails項(xiàng)目與CAS集成,實(shí)現(xiàn)單點(diǎn)登錄功能。
開(kāi)發(fā)環(huán)境:

OS:Windows XP

IDE:Intellij IDEA 7.0

Web Framework: Grails 1.0.3

Web Server: Tomcat 6.0

DB server: MySQL 5.0

CAS: cas-server-3.2.1 cas-client-3.1.3

    CAS是耶魯大學(xué)的一個(gè)開(kāi)源項(xiàng)目,提供企業(yè)應(yīng)用的單點(diǎn)登錄功能。CAS由一個(gè)Java實(shí)現(xiàn)的服務(wù)器端組件和支持眾多平臺(tái)的客戶端插件庫(kù)兩大部分組成。其豐富的插件庫(kù)涵蓋了目前各個(gè)主要的Web開(kāi)發(fā)平臺(tái)。CAS通過(guò)一個(gè)公用的認(rèn)證系統(tǒng)統(tǒng)一管理和驗(yàn)證用戶的身份。在CAS上認(rèn)證的用戶將獲得CAS頒發(fā)的一個(gè)數(shù)字證書(shū),憑借這個(gè)證書(shū),用戶可以在承認(rèn)CAS證書(shū)的各個(gè)系統(tǒng)上自由穿梭訪問(wèn),不需要再次登錄認(rèn)證。要完成該認(rèn)證過(guò)程,就需要一個(gè)認(rèn)證中心服務(wù)器CAS Server和嵌入在不同Web應(yīng)用系統(tǒng)的認(rèn)證客戶端CAS Client進(jìn)行協(xié)同。 其運(yùn)行原理如圖1所示,用戶通過(guò)Web瀏覽器向某個(gè)Web服務(wù)程序發(fā)出訪問(wèn)請(qǐng)求,該HTTP請(qǐng)求被安裝在Web服務(wù)端的CAS客戶端程序(HTTP過(guò)濾 器)攔截,客戶端審查該請(qǐng)求是否帶有CAS服務(wù)器下發(fā)的證書(shū),如果沒(méi)有則該請(qǐng)求被重定向到CAS服務(wù)器進(jìn)行認(rèn)證并發(fā)放證書(shū),認(rèn)證成功后,用戶的請(qǐng)求才被引導(dǎo)到Web服務(wù)程序。


圖1 CAS實(shí)現(xiàn)單點(diǎn)登錄的基本原理

第一步,搭建Java Web服務(wù)器,用于部署CAS的中央認(rèn)證服務(wù)
 
    下載并安裝JDK、Tomcat6.0,設(shè)置好環(huán)境變量JAVA_HOME以及CATALINA_HOME。如:JAVA_HOME = C:"Sun"SDK"jdk, CATALINA_HOME = D:"Program Files"Apache Software Foundation"Tomcat 6.0。訪問(wèn)http://localhost:8080,出現(xiàn)Tomcat的管理頁(yè)面,則配置成功。

第二步,生成數(shù)字證書(shū)
    在命令行窗口執(zhí)行以下3條命令:
keytool -genkey -keyalg RSA -alias demo -dname "cn=demo.com" -storepass changeit,創(chuàng)建一個(gè)別名為demo的證書(shū),使用RSA算法,證書(shū)的DN域?yàn)閐emo.com,在證書(shū)數(shù)據(jù)庫(kù)里的存儲(chǔ)密碼為changeit。要注意的是在域名服務(wù)器里做好demo.com與CAS服務(wù)器IP的對(duì)應(yīng)解析,如果不具備進(jìn)行域名解析的條件,可以在DN域填寫(xiě)服務(wù)器的主機(jī)名。
keytool -export -alias demo -file %jAVA_HOME%/jre/lib/security/demo.crt -storepass changeit,從證書(shū)導(dǎo)出為證書(shū)文件demo.crt。
keytool -import -alias demo -file %JAVA_HOME%/jre/lib/security/demo.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit,將demo.crt導(dǎo)入jre的可信任證書(shū)倉(cāng)庫(kù)。
    需要注意的是,Tomcat默認(rèn)的JRE路徑不一定跟你的JAVA_HOME一致(參照Tomcat->configure->java->Java Vritual Machine記錄的路徑),而CAS是按照Tomcat默認(rèn)的位置去尋找證書(shū),因此在這種情況下你應(yīng)該加入這樣兩個(gè)命令以防萬(wàn)一:
keytool -export -alias demo -file “Tomcat默認(rèn)的jre”/lib/security/demo.crt -storepass changeit
keytool -import -alias demo -file “Tomcat默認(rèn)的jre”/lib/security/demo.crt -keystore “Tomcat默認(rèn)的jre”/lib/security/cacerts -storepass changeit

第三步,配置Tomcat支持HTTPS
    CAS的認(rèn)證過(guò)程是基于安全的http數(shù)據(jù)傳輸?shù)模虼诵枰_(kāi)啟HTTPS功能。編輯%CATALINA_HOME%/conf/server.xml,找到默認(rèn)被注釋的port="8443"那一行進(jìn)行編輯,如下例:

<Connector port="8443"
               protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               enableLookups="true" disableUploadTimeout="true"
               keystoreFile="C:"Documents and Settings"xin".keystore" keystorePass="changeit"
               truststoreFile="C:"Program Files"Java"jre1.6.0"lib"security"cacerts"
               clientAuth="false" sslProtocol="TLS" />

    現(xiàn)在訪問(wèn)https://localhost:8443,如果瀏覽器彈出窗口,要求你接受證書(shū),如圖2,而你接受證書(shū)后出現(xiàn)Tomcat管理頁(yè),則證明證書(shū)制作和HTTPS配置都已成功,第三步完成。
 
   
圖2 啟用https并接受服務(wù)器下發(fā)的數(shù)字證書(shū)

 
第四步,在Tomcat上部署CAS中央認(rèn)證服務(wù)器
    以版本3.2.1為例,在cas-server-3.2.1/modules下,有一個(gè)打包好的War文件cas-server-webapp- 3.2.1.war,將其拷貝到%CATALINA_HOME%/webapp下并改名為cas.war,進(jìn)行部署。訪問(wèn)網(wǎng)址http: //localhost:8080/cas/index.jsp,如果出現(xiàn)CAS的登錄界面,如圖3,則說(shuō)明部署成功。
 
   
   圖3 部署CAS認(rèn)證服務(wù)器
 
第五步,配置CAS使用JDBC數(shù)據(jù)源進(jìn)行用戶認(rèn)證
    CAS服務(wù)器默認(rèn)的用戶驗(yàn)證策略是只要用戶名和密碼相同就可以通過(guò)認(rèn)證,過(guò)于簡(jiǎn)單,必須進(jìn)行修改。我們以MySQL數(shù)據(jù)庫(kù)中test庫(kù)中的sso_user表作為數(shù)據(jù)源來(lái)進(jìn)行驗(yàn)證。在MySQL數(shù)據(jù)庫(kù)中,創(chuàng)建sso_user表,存放整個(gè)單點(diǎn)登錄體系內(nèi)通用的用戶名和密碼:
CREATE TABLE `sso_user` (  
  `username` varchar(30) NOT NULL default '',  
  `password` varchar(45) NOT NULL default '',  
  PRIMARY KEY  (`username`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
并添加用戶:  
INSERT INTO `sso_user` (`username`,`password`) VALUES  
 ('test1','pass1'),  
 ('test2','pass2');

    然后編輯%CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,找到<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  
注釋掉該行,替換為:  
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
                            <property name="sql" value="select password from sso_user where username=?" />  
                            <property name="dataSource" ref="dataSource" />  
                     </bean>  
    并添加一個(gè)bean:  
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">  
       <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>  
       <property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>  
       <property name="username"><value>test</value></property>  
       <property name="password"><value>test</value></property>  
    </bean>  
    拷貝cas-server-support-jdbc-3.2.1.jar和mysql-connector-java-5.1.6-bin.jar到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。
現(xiàn)在,CAS服務(wù)器端的配置都已完成,認(rèn)證的工作由cas服務(wù)器來(lái)做,而如何將認(rèn)證的任務(wù)安全轉(zhuǎn)移到cas服務(wù)器,就是接下來(lái)的cas客戶端的工作了。

第六步,配置CAS客戶端,并與Grails項(xiàng)目集成
    CAS客戶端不是單獨(dú)存在的,它以插件的形式嵌入到基于各種平臺(tái)的Web應(yīng)用程序中,目前主要的web平臺(tái),Java、.net、PHP、Python、Perl等等,都能得到很好的支持。在本文中我們以Grails平臺(tái)為例來(lái)進(jìn)行分析。
    Grails是Java社區(qū)新出現(xiàn)的開(kāi)源敏捷Web開(kāi)發(fā)框架,配合使用與Java無(wú)縫集成的Groovy動(dòng)態(tài)語(yǔ)言,Groovy和Grails就如同Ruby與Rails的關(guān)系。
用Grails進(jìn)行項(xiàng)目開(kāi)發(fā),顯然不適用只依靠命令行和文本編輯器來(lái)開(kāi)發(fā),在IDE的選擇上,本人推薦Intellij IDEA 7.0,這是目前為止對(duì)Groovy和Grails特性支持最好的IDE,在這一方面要遠(yuǎn)勝于Eclipse。

在IDE上支持Grails特性:
    IDEA的基本配置不支持Grails,需要安裝一個(gè)JetGroovy插件。安裝并運(yùn)行IDEA,選擇file->settings->Plugins,出現(xiàn)插件庫(kù)對(duì)話框,如圖4,選擇Available標(biāo)簽頁(yè),在可用插件列表中選擇安裝JetGroovy插件就OK了。
 
   
 
圖4 在IntelliJ IDEA 7.0上安裝JetGroovy插件
 

建立項(xiàng)目:
    新的Grails項(xiàng)目,可以在IDEA里直接新建Grails Application,也可以在Grails的CLI環(huán)境里,運(yùn)行g(shù)rails create-app創(chuàng)建項(xiàng)目,然后再用IDEA導(dǎo)入項(xiàng)目文件。Grails項(xiàng)目的目錄結(jié)構(gòu)如圖5:
 
   
圖5 Grails程序的文件目錄

更改Web服務(wù)端口:
     Grails內(nèi)置了一個(gè)Web服務(wù)器Jetty,默認(rèn)端口是8080,這與Tomcat的默認(rèn)端口是一樣的,如果你的開(kāi)發(fā)環(huán)境中8080已經(jīng)被占用了,那么就需要更改Grails的服務(wù)端口,方法如下:
在$GRAILS_HOME/scripts/Init.groovy 中找出以 serverPort 開(kāi)頭的那一行,并更改值:
     serverPort = System.getProperty('server.port') ?
          System.getProperty('server.port').toInteger() : 9090
安裝cas-plugin:
    打開(kāi)Grails命令行工具,改變當(dāng)前路徑到項(xiàng)目根目錄,運(yùn)行Grails install-plugin cas-client,
Grails會(huì)在項(xiàng)目根目錄/plugins下添加gwt相關(guān)資源。同時(shí),在IDEA中我們也需要提醒IDE安裝了插件,打開(kāi)項(xiàng)目工程的Mudule Settings,在設(shè)置頁(yè)的最左邊一欄選擇Libraries,然后在中間一欄右鍵選擇New Project Library,在彈出窗口中填寫(xiě)CAS-Plugin,如圖6所示:
   
圖6 建立CAS-Plugin的依賴庫(kù)

    接下來(lái)在最后邊一欄點(diǎn)擊Attach Jar Directories,指明CAS客戶端庫(kù)文件的路徑,即項(xiàng)目根目錄/plugins/cas-client-1.0"lib,好準(zhǔn)備工作完成。
    假如我們的Grails Application名字是test,那么運(yùn)行程序,然后在瀏覽器輸入http://localhost:9090/test,就能出現(xiàn)歡迎Grails的歡迎頁(yè)面。
將認(rèn)證工作交給CAS服務(wù)器:
    編輯$項(xiàng)目主目錄$/grails-app/conf下的Config.groovy文件,加入以下代碼:
// cas client configuration, required by CasClientPlugin
cas {
urlPattern = '/*'
//    urlPattern = ['/oneurl/*', '/another', '/anotheranother/*']
    disabled = false
}
environments {
    development {
        cas.loginUrl = 'https://demo.com:8443/cas/login'
        cas.validateUrl = 'https://demo.com:8443/cas/serviceValidate'
        cas.serverName = 'localhost:9090'
//        cas.serviceUrl = 'http://dev.casclient.demo.com/access'
        cas.disabled = false
        cas.mocking = true
    }
    test {
//        cas.loginUrl = 'https://test.casserver.demo.com/cas/login'
//        cas.validateUrl = 'https://test.cas.com/cas/serviceValidate'
//        cas.serverName = 'test.casclient.demo.com:80'
//        cas.serviceUrl = 'http://test.casclient.demo.com/access'
    }
    production {
//        cas.loginUrl = 'https://prod.casserver.demo.com/cas/login'
//        cas.validateUrl = 'https://prod.casserver.demo.com/cas/serviceValidate'
//        cas.serverName = 'prod.casclient.demo.com:80'
//        cas.serviceUrl = 'http://prod.casclient.demo.com/access'
    }
}
    起關(guān)鍵作用的就是加亮顯示的3行代碼,當(dāng)用戶訪問(wèn)http://localhost:9090/test時(shí),請(qǐng)求會(huì)被重定向到https://demo.com:8443/cas/login.jsp進(jìn)行登錄,然后由https://demo.com:8443/cas/serviceValidate.jsp進(jìn)行身份驗(yàn)證,通過(guò)后,請(qǐng)求才回到初始目的地址。
    至此,我們就完成了CAS的集成。
 



]]>
主站蜘蛛池模板: 日韩免费无码视频一区二区三区| 久久不见久久见免费影院| 99人中文字幕亚洲区| 成人免费无毒在线观看网站| 曰批免费视频播放在线看片二| 国产亚洲福利精品一区| 很黄很色很刺激的视频免费| 免费国产在线精品一区| 亚洲精品成人网站在线播放| 免费a级毛片网站| 色播在线永久免费视频| jizz免费观看视频| 亚洲综合图片小说区热久久| 青青草国产免费久久久91| 亚洲人成色在线观看| 免费看国产曰批40分钟| 中文无码成人免费视频在线观看| 亚洲妇女水蜜桃av网网站| 国产人成免费视频| 免费国产成人α片| 亚洲最大的成人网| 亚洲午夜久久久影院| 成人免费一级毛片在线播放视频 | 四虎免费影院ww4164h| 亚洲一区二区三区91| 四虎在线视频免费观看| 国产亚洲精品美女久久久久 | 黄色毛片免费观看| 亚洲一区二区电影| 午夜电影免费观看| 久久久久久国产精品免费免费男同| 亚洲成A人片在线观看无码不卡 | 曰批全过程免费视频在线观看 | 国产精品午夜免费观看网站| 久久亚洲日韩看片无码| 国产精品免费视频网站| 久久午夜羞羞影院免费观看| 美女黄色免费网站| 亚洲国产精品成人精品小说| 亚洲中文字幕日产乱码高清app| 免费无码AV电影在线观看|