<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    cas單點(diǎn)登錄配置速成


    服務(wù)端配置
    cas是個(gè)好東西,很靈活很好用,但是配置起來很麻煩,網(wǎng)上資料比較零碎。不弄個(gè)三五天根本不知道其中的原理,終于在多天的奮斗中配置成功,現(xiàn)在將配置的一些過程記錄下來供大家參考。


    cas官方網(wǎng)站

    http://www.jasig.org/cas

    下載最新的服務(wù)端 CAS Server 3.3.3 Final

    解壓后將modules下面的cas-server-webapp-3.3.3.war部署到web服務(wù)器,作為單點(diǎn)登錄的服務(wù)器。

     

    登錄的服務(wù)器下面很多配置文件,通過配置可以做一些擴(kuò)展。

    修改點(diǎn)1:驗(yàn)證方式使用我們自己的用戶表驗(yàn)證

    cas和當(dāng)前已有的系統(tǒng)做集成的入口

    1.修改deployerConfigContext.xml文件

    添加數(shù)據(jù)源配置

    XML/HTML代碼

    <bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">   
         
    <property name="driverClassName">   
              
    <value>com.mysql.jdbc.Driver</value>   
         
    </property>   
         
    <property name="url">   
              
    <value>jdbc:mysql://192.168.1.100/ires?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true</value>   
         
    </property>   
         
    <property name="username">   
              
    <value>ires</value>   
         
    </property>   
         
    <property name="password">   
              
    <value>i709394</value>   
         
    </property>   
    </bean>   

    定義MD5的加密方式

    XML/HTML代碼


    <bean id="passwordEncoder"      
        class
    ="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">          
        
    <constructor-arg value="MD5"/>      
    </bean> 

    配置authenticationManager下面的authenticationHandlers屬性

    XML/HTML代碼


    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">   
                          
    <property name="dataSource" ref="casDataSource" />   
                          
    <property name="sql" value="select community_password from community_user_info where lower(community_user_info.community_user) = lower(?)" />   
                            
    <property  name="passwordEncoder"  ref="passwordEncoder"/>   
    </bean>

    修改點(diǎn)2:獲取用戶信息保存,方便各個(gè)客戶端可以統(tǒng)一得到用戶信息

    1.定義attributeRepository,通過jdbc查詢用戶的詳細(xì)信息,可以把用戶表或用戶的所屬組織機(jī)構(gòu)或角色等查詢出來。

    XML/HTML代碼


    <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">   
                        
    <constructor-arg index="0" ref="casDataSource" />   
                        
    <constructor-arg index="1" >   
                            
    <list>   
                                    
    <value>username</value>   
                                    
    <value>username</value>   
                            
    </list>   
                         
    </constructor-arg>   
                        
    <constructor-arg index="2">   
                            
    <value>   
                                select * ,(SELECT orgn_organization.id  from orgn_organization left join orgn_member on orgn_member.orgn_id = orgn_organization.id left join community_user_info on community_user_info.id = orgn_member.user_id where community_user_info.community_user = ?) as orgnId from community_user_info where community_user=?    
                            
    </value>   
                        
    </constructor-arg>   
                        
    <property name="columnsToAttributes">   
                            
    <map>   
                                
    <entry key="id" value="id" />   
                                
    <entry key="community_user" value="userName" />   
                                
    <entry key="orgnId" value="orgnId" />   
                                
    <entry key="is_admin" value="isAdmin" />   
                                    
                            
    </map>   
                        
    </property>   
                    
    </bean>   

    2.配置authenticationManager中credentialsToPrincipalResolvers屬性

    XML/HTML代碼


    <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">   
                        
    <property name="attributeRepository" ref="attributeRepository" />   
    </bean>   

    注意:默認(rèn)cas登錄服務(wù)器沒有把用戶信息傳到客戶端中,所以要修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,增加

    XML/HTML代碼


    <c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">   
    <cas:attributes>   
    <c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">   
                              
                                            
    <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>   
       
                               
    </c:forEach>     
    </cas:attributes>   
    </c:if>   

    修改點(diǎn)3:用數(shù)據(jù)庫來保存登錄的會(huì)話

    這樣服務(wù)器在重新啟動(dòng)的時(shí)候不會(huì)丟失會(huì)話。

    1.修改ticketRegistry.xml文件

    將默認(rèn)的ticketRegistry改成

    XML/HTML代碼


    <bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.JpaTicketRegistry">   
            
    <constructor-arg index="0" ref="entityManagerFactory" />   
        
    </bean>   
            
        
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">   
            
    <property name="dataSource" ref="dataSource"/>   
            
    <property name="jpaVendorAdapter">   
                
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">   
                    
    <property name="generateDdl" value="true"/>   
                    
    <property name="showSql" value="true" />   
                
    </bean>   
            
    </property>   
            
    <property name="jpaProperties">   
                
    <props>   
                    
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>   
                    
    <prop key="hibernate.hbm2ddl.auto">update</prop>   
                
    </props>   
            
    </property>   
        
    </bean>   
       
        
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"   
            p:entityManagerFactory-ref
    ="entityManagerFactory" />   
       
        
    <tx:annotation-driven transaction-manager="transactionManager"/>   
       
        
    <bean   
            
    id="dataSource"   
            class
    ="org.apache.commons.dbcp.BasicDataSource"   
            p:driverClassName
    ="com.mysql.jdbc.Driver"   
            p:url
    ="jdbc:mysql://192.168.1.100:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"   
            p:password
    ="709394"   
            p:username
    ="itravel" />   

    配置完之后還需要一些jar的支持,根據(jù)提示那些包缺少到網(wǎng)上找。

     

    修改點(diǎn)4:配置remenber me的功能,可以讓客戶端永久保存session

    1.修改deployerConfigContext.xml文件

    authenticationManager增加authenticationMetaDataPopulators屬性

    XML/HTML代碼


    <property name="authenticationMetaDataPopulators">   
        
    <list>   
            
    <bean class="org.jasig.cas.authentication.principal.RememberMeAuthenticationMetaDataPopulator" />   
        
    </list>   
    </property>   

    2.修改cas-servlet.xml

    修改authenticationViaFormAction配置變成

    XML/HTML代碼

    <bean id="authenticationViaFormAction" class="org.jasig.cas.web.flow.AuthenticationViaFormAction"   
        p:centralAuthenticationService-ref
    ="centralAuthenticationService"   
        p:formObjectClass
    ="org.jasig.cas.authentication.principal.RememberMeUsernamePasswordCredentials"   
        p:formObjectName
    ="credentials"   
        p:validator-ref
    ="UsernamePasswordCredentialsValidator"   
        p:warnCookieGenerator-ref
    ="warnCookieGenerator" />   

    增加UsernamePasswordCredentialsValidator

    XML/HTML代碼

    <bean id="UsernamePasswordCredentialsValidator" class="org.jasig.cas.validation.UsernamePasswordCredentialsValidator" />   

    修改ticketExpirationPolicies.xml,grantingTicketExpirationPolicy配置如下,注意時(shí)間要加大,不然session很容易過期,達(dá)不到remember me的效果。

    XML/HTML代碼

    <bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.RememberMeDelegatingExpirationPolicy">   
       
    <property name="sessionExpirationPolicy">   
        
    <bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">   
               
    <constructor-arg index="0" value="2592000000" />   
        
    </bean>   
       
    </property>   
       
    <property name="rememberMeExpirationPolicy">   
        
    <bean class="org.jasig.cas.ticket.support.TimeoutExpirationPolicy">   
               
    <constructor-arg index="0" value="2592000000" />   
        
    </bean>   
       
    </property>   
    </bean>   

    修改點(diǎn)5:取消https驗(yàn)證

    在網(wǎng)絡(luò)安全性較好,對系統(tǒng)安全沒有那么高的情況下可以取消https驗(yàn)證,使系統(tǒng)更加容易部署。

    1.修改ticketGrantingTicketCookieGenerator.xml

    XML/HTML代碼


    <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"   
            p:cookieSecure
    ="false"   
            p:cookieMaxAge
    ="-1"   
            p:cookieName
    ="CASTGC"   
            p:cookiePath
    ="/cas" />   

    p:cookieSecure改成false,客戶端web.xml中單獨(dú)服務(wù)器的鏈接改成http

     

     

     

    使用https協(xié)議的配置

    1.證書生成和導(dǎo)入

    下面是一個(gè)生成證書和導(dǎo)入證書的bat腳本,如果web應(yīng)用和單獨(dú)登錄服務(wù)器部署在同一臺(tái)機(jī)可以一起執(zhí)行

    C++代碼


    @echo off    
    if "%JAVA_HOME%" == "" goto error    
    @echo on    
       
    @echo off    
    cls     
    rem please 
    set the env JAVA_HOME before run this bat file     
    rem delete alia tomcat 
    if it is existed     
    keytool 
    -delete -alias tomcatsso -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit     
    keytool 
    -delete -alias tomcatsso -storepass changeit     
    REM (注釋: 清除系統(tǒng)中可能存在的名字為tomcatsso 的同名證書)    
    rem list all alias 
    in the cacerts     
    keytool 
    -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit     
    REM (注釋: 列出系統(tǒng)證書倉庫中存在證書名稱列表)    
    rem generator a key     
    keytool 
    -genkey -keyalg RSA -alias tomcatsso -dname "cn=localhost" -storepass changeit     
    REM (注釋:指定使用RSA算法,生成別名為tomcatsso的證書,存貯口令為changeit,證書的DN為
    "cn=linly" ,這個(gè)DN必須同當(dāng)前主機(jī)完整名稱一致哦,切記!!!)    
    rem export the key     
    keytool 
    -export -alias tomcatsso -file "%java_home%/jre/lib/security/tomcatsso.crt" -storepass changeit     
    REM (注釋: 從keystore中導(dǎo)出別名為tomcatsso的證書,生成文件tomcatsso.crt)    
    rem import into trust cacerts     
    keytool 
    -import -alias tomcatsso -file "%java_home%/jre/lib/security/tomcatsso.crt" -keystore "%java_home%/jre/lib/security/cacerts" -storepass changeit     
    REM (注釋:將tomcatsso.crt導(dǎo)入jre的可信任證書倉庫。注意,安裝JDK是有兩個(gè)jre目錄,一個(gè)在jdk底下,一個(gè)是獨(dú)立的jre,這里的目錄必須同Tomcat使用的jre目錄一致,否則后面Tomcat的HTTPS通訊就找不到證書了)    
    rem list all alias 
    in the cacerts     
    keytool 
    -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit    
    pause    
       
    :error    
    echo 請先設(shè)置JAVA_HOME環(huán)境變量    
    :end   

    3.將.keystore文件拷貝到tomcat的conf目錄下面,注意.keystore會(huì)在證書生成的時(shí)候生成到系統(tǒng)的用戶文件夾中,如windows會(huì)生產(chǎn)到C:\Documents and Settings\[yourusername]\下面

    2.配置tomcat,把https協(xié)議的8443端口打開,指定證書的位置。

    XML/HTML代碼


    <Connector port="8443" maxHttpHeaderSize="8192"   
                  maxThreads
    ="150" minSpareThreads="25" maxSpareThreads="75"   
                  enableLookups
    ="false" disableUploadTimeout="true"   
                  acceptCount
    ="100" scheme="https" secure="true"   
                  clientAuth
    ="false" sslProtocol="TLS"     
      keystoreFile
    ="conf/.keystore"  keystorePass="changeit"   truststoreFile="C:\Program Files\Java\jdk1.5.0_07\jre\lib\security\cacerts"/>     

    客戶端配置

    cas官方網(wǎng)站上面的客戶端下載地址比較隱秘,沒有完全公開,具體地址為

    http://www.ja-sig.org/downloads/cas-clients/

    下載最新的cas-client-3.1.6-release.zip

    1.解壓后把modules下面的包放到我們的web應(yīng)用中

    2.配置web.xml,注意encodingFilter要提前配置,不然會(huì)出現(xiàn)數(shù)據(jù)插入數(shù)據(jù)庫的時(shí)候有亂碼。

    serverName是我們web應(yīng)用的地址和端口

    XML/HTML代碼


    <context-param>   
            
    <param-name>serverName</param-name>   
       
       
            
    <param-value>192.168.1.145:81</param-value>   
       
        
    </context-param>   
            
            
        
    <filter>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <filter-class>   
                org.springframework.web.filter.CharacterEncodingFilter    
            
    </filter-class>   
            
    <init-param>   
                
    <param-name>encoding</param-name>   
                
    <param-value>UTF-8</param-value>   
            
    </init-param>   
            
    <init-param>   
                
    <param-name>forceEncoding</param-name>   
                
    <param-value>true</param-value>   
            
    </init-param>   
        
    </filter>   
            
            
            
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.htm</url-pattern>   
        
    </filter-mapping>   
       
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.ftl</url-pattern>   
        
    </filter-mapping>   
       
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.xhtml</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.html</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.shtml</url-pattern>   
        
    </filter-mapping>   
       
       
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.jsp</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.do</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>encodingFilter</filter-name>   
            
    <url-pattern>*.vm</url-pattern>   
        
    </filter-mapping>   
            
            
            
            
            
        
    <filter>   
            
    <filter-name>CAS Single Sign Out Filter</filter-name>   
            
    <filter-class>   
                org.jasig.cas.client.session.SingleSignOutFilter    
            
    </filter-class>   
        
    </filter>   
        
    <filter-mapping>   
            
    <filter-name>CAS Single Sign Out Filter</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
        
    <listener>   
            
    <listener-class>   
                org.jasig.cas.client.session.SingleSignOutHttpSessionListener    
            
    </listener-class>   
        
    </listener>   
        
    <filter>   
            
    <filter-name>CAS Authentication Filter</filter-name>   
            
    <filter-class>   
                org.jasig.cas.client.authentication.AuthenticationFilter    
            
    </filter-class>   
            
    <init-param>   
                
    <param-name>casServerLoginUrl</param-name>   
                
    <param-value>http://192.168.1.100/cas/login</param-value>   
            
    </init-param>   
        
    </filter>   
        
    <filter>   
            
    <filter-name>CAS Validation Filter</filter-name>   
            
    <filter-class>   
                org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter    
            
    </filter-class>   
            
    <init-param>   
                
    <param-name>casServerUrlPrefix</param-name>   
                
    <param-value>http://192.168.1.100/cas</param-value>   
            
    </init-param>   
        
    </filter>   
       
        
    <filter>   
            
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>   
            
    <filter-class>   
                org.jasig.cas.client.util.HttpServletRequestWrapperFilter    
            
    </filter-class>   
        
    </filter>   
        
    <filter>   
            
    <filter-name>CAS Assertion Thread Local Filter</filter-name>   
            
    <filter-class>   
                org.jasig.cas.client.util.AssertionThreadLocalFilter    
            
    </filter-class>   
        
    </filter>   
        
    <filter-mapping>   
            
    <filter-name>CAS Authentication Filter</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>CAS Validation Filter</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   
        
    <filter-mapping>   
            
    <filter-name>CAS Assertion Thread Local Filter</filter-name>   
            
    <url-pattern>/*</url-pattern>   
        
    </filter-mapping>   

    3.導(dǎo)入證書,如果不用https的話,這步可以跳過,把tomcatsso.crt證書拷貝到c盤下面,在jdk的bin目錄下面運(yùn)行下面的語句。

     

    JavaScript代碼


    rem (注釋: 清除系統(tǒng)中可能存在的名字為tomcatsso 的同名證書)    
    keytool 
    -delete -alias tomcatsso -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit     
    keytool 
    -delete -alias tomcatsso -storepass changeit     
       
    rem 在客戶端的 JVM 里導(dǎo)入信任的 SERVER 的證書 ( 根據(jù)情況有可能需要管理員權(quán)限 )     
    keytool 
    -import -alias tomcatsso -file "c:/tomcatsso.crt" -keystore "%java_home%/jre/lib/security/cacerts" -storepass changeit    

     客戶端獲取登錄用戶名和用戶信息實(shí)例

    Java代碼

    HttpServletRequest request = ServletActionContext.getRequest();    
    AttributePrincipal principal 
    = (AttributePrincipal)request.getUserPrincipal();    
    String username 
    = principal.getName();    
    Long orgnId 
    = Long.parseLong(principal.getAttributes().get("orgnId").toString());   

    posted on 2009-10-20 23:58 paulwong 閱讀(4603) 評論(6)  編輯  收藏 所屬分類: J2EE

    Feedback

    # re: cas單點(diǎn)登錄配置速成 2009-10-22 16:23 849536401

    樓主寫的非常詳細(xì),這是到現(xiàn)在為止我看到最全的cas配置文檔了。
    正需要這些信息呢,謝謝了!
    :)  回復(fù)  更多評論   

    # re: cas單點(diǎn)登錄配置速成 2009-10-30 15:00 游客

    學(xué)習(xí)  回復(fù)  更多評論   

    # re: cas單點(diǎn)登錄配置速成 2009-12-04 23:14 unique_zxs

    寫的非常棒,找了半個(gè)月你的是最詳細(xì)的。非常實(shí)用。  回復(fù)  更多評論   

    # re: cas單點(diǎn)登錄配置速成 2010-03-25 09:00 groush

    <c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
    <cas:attributes>
    <c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">

    <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>


    </c:forEach>
    </cas:attributes>
    </c:if>
    這個(gè)文件拷進(jìn)去,是錯(cuò)的,但是我修改后,用戶信息也出不來,郁悶ing  回復(fù)  更多評論   

    # re: cas單點(diǎn)登錄配置速成 2010-05-12 15:33 郭凡

    到底怎么樣實(shí)現(xiàn)只登錄一次啊。。。還是沒看到具體的最后得到用戶信息這個(gè)東西有撒子用處?  回復(fù)  更多評論   

    # re: cas單點(diǎn)登錄配置速成 2010-05-12 15:41 郭凡

    哥哥,,522196314 能加我嗎。。。崇拜你  回復(fù)  更多評論   


    主站蜘蛛池模板: 麻豆国产入口在线观看免费| 亚洲AV无码专区在线播放中文 | 男女猛烈激情xx00免费视频| 在线观看AV片永久免费| 亚洲欧洲免费视频| 91视频免费网站| 亚洲熟伦熟女新五十路熟妇| 亚洲а∨精品天堂在线| 国产免费久久精品99re丫y| 中文字幕亚洲综合久久| 无码国产精品一区二区免费16| 亚洲综合无码AV一区二区| 乱人伦中文视频在线观看免费| 国产日产成人免费视频在线观看| 伊人久久五月丁香综合中文亚洲| 无码国产精品一区二区免费式直播| 亚洲精品天天影视综合网| 青青青国产手机频在线免费观看| 亚洲午夜无码久久久久| 亚洲精品黄色视频在线观看免费资源| 男女一边摸一边做爽的免费视频| 国产免费人成视频在线观看| 亚洲乱码av中文一区二区| 成人毛片18女人毛片免费 | 免费无码婬片aaa直播表情| 国产无遮挡裸体免费视频| 久久久久久亚洲精品无码| 永久黄网站色视频免费| 亚洲av成人中文无码专区| 日韩一区二区在线免费观看 | 亚洲午夜AV无码专区在线播放 | 亚洲精品又粗又大又爽A片| 成年大片免费视频| 亚洲午夜理论片在线观看| 在线观看免费大黄网站| 亚洲精品无码人妻无码| 国产精品免费小视频| 极品美女一级毛片免费| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久久精品国产亚洲成人满18免费网站 | 国产国产人免费视频成69大陆|