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

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

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

    Liferay中使用CAS實現(xiàn)單點登陸(SSO)

    單點登陸(SSO)的實現(xiàn)方式有很多種,這里所說的是用CAS實現(xiàn),這也是Liferay中所采納的方式。至于什么是CAS,單點登陸實現(xiàn)的原理等,這里不做解釋,直接一步一步明說實現(xiàn)方式,好了,多一個字的費話也不說了。

    第一步,創(chuàng)建證書

    keytool -genkey -alias tomcat -keystore c:\mykeystore  -dname "CN=xyb, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456

    PS:

     -genkey         創(chuàng)建一個證書
    -alias          證書的別名
    -keystore       指定生成此證書的路徑(可不寫,默認存在系統(tǒng)的Home目錄下.keystore文件中
    -storepass      指定密鑰庫的密碼
    -keypass        指定別名條目的密碼
    -dname          指定證書擁有者信息(可不寫,但,系統(tǒng)會提示你依次輸入這些信息,特別要注意“CN”的值是你想做為CAS服務(wù)器的這臺機器的域名或機器名,但就是不能是IP)
    -keyalg         指定密鑰的算法(可不寫)   
    -validity       指定創(chuàng)建的證書有效期多少天(可不寫,默認為90天)

    第二步,導(dǎo)出證書

    keytool -export -alias tomcat -keystore c:\mykeystore -file c:\mycerts.cer -storepass 123456

    PS:

    -export         將別名指定的證書導(dǎo)出到文件
    -keystore       指定生成此證書的路徑(上一步中寫的什么這就寫什么,如果沒寫,這也不寫)
     -file           指定導(dǎo)出到文件的文件名

    第三步,把導(dǎo)出的證書導(dǎo)入到客戶端服務(wù)器

    keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass 123456 -file c:\mycerts.cer

    PS:

    -import         將已簽名數(shù)字證書導(dǎo)入密鑰庫
    -file           指定要導(dǎo)入到密鑰庫的文件名(也就是上一步導(dǎo)出的那個文件)
    有一個提示:是否信任這個證書,輸入 Y,回車。

    第四步,下載cas集成包。將下載后的文件改名為cas-web,放置在liferay的webapps目錄下,在conf/server.xml中找到下面這段,去掉原有的注釋并修改為:

    <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" URIEncoding="UTF-8"  keystorePass="123456" keyAlias="tomcat"/>

    第五步,在Liferay的webapps\ROOT\WEB-INF\classes\portal-ext.properties下添加如下內(nèi)容:

    cas.auth.enabled=true
    cas.login.url=https://xyb:8443/cas-web/login
    cas.logout.url=https://xyb:8443/cas-web/logout
    cas.server.name=客戶端IP:8080
    cas.service.url=
    #cas.service.url=http://localhost:8080/c/portal/login
    cas.validate.url=https://xyb:8443/cas-web/proxyValidate

    如果沒在Liferay下,只是普通的Web程序可用Filter來實現(xiàn),打開Web-INF\Web.XML文件,增加如下代碼

    <filter>
            
    <filter-name>CASFilter</filter-name>
            
    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
            
    <init-param>
                
    <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
                
    <param-value>https://xyb:8443/cas-web/login</param-value>
            
    </init-param><!--這里的xyb是CAS服務(wù)端的IP或機器名-->
            
    <init-param>
                
    <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
                
    <param-value>https://xyb:8443/cas-web/proxyValidate</param-value>
            
    </init-param>
            
    <init-param>
              
    <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
              
    <param-value>localhost:8080</param-value><!--client:port就是需要CAS需要攔截的地址和端口,一般就是這個TOMCAT所啟動的IP和port-->
            
    </init-param>
        
    </filter>
        
        
    <filter-mapping>
            
    <filter-name>CASFilter</filter-name>
            
    <url-pattern>/*</url-pattern><!--這里就是你要攔截的URL請求-->
        
    </filter-mapping>

     

    最后一步,在客戶端獲取CAS認證通過的用戶名,并修改身份驗證程序為只通過用戶名來驗證。如是在Liferay下就不用做這一步了,Liferay中本身的驗證是ScreenName字段

    1、在JSP或Servlet中的用法:

    <%@ page import="edu.yale.its.tp.cas.client.filter.CASFilter" %>
    <%@ page import="javax.servlet.http.HttpServletRequest" %>
    <%@ page import="javax.servlet.http.HttpSession" %>
    <%
    HttpSession ses 
    = request.getSession();

    String screenName 
    =
    (String)ses.getAttribute(CASFilter.CAS_FILTER_USER);
    System.out.println(
    "screenName==:"+screenName);
    %> 

    2、在Java中通過 Session 獲取登錄用戶名

    // 以下兩者都可以
    session.getAttribute(CASFilter.CAS_FILTER_USER);
    session.getAttribute(
    "edu.yale.its.tp.cas.client.filter.user");

    3、在 JSTL 中獲取用戶名的方法

    <c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>


    問題匯總:

     嚴重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
    yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
    MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]

    這個CAS異常是從CAS Client里面拋出,是當我們不使用證書的CN去訪問域名的時候(比如上文是用IP訪問而且證書的CN是該IP對應(yīng)的域名而非該IP),CASClient無法信任,也就是我上面特意提到的那個CN的問題。要特別注意。

    還有一種情況就是客戶端證書沒有導(dǎo)入,同樣也報這個錯誤,最終可以歸為一句話,肯定是證書驗證沒有通過所致.

     

    INFO [org.jasig.cas.authentication.AuthenticationManager
    Impl] - <AuthenticationHandler: cn.com.tiansky.cas.authenticationHandlers.UPAuthenticationHandler successfully authenticated the user which provided the followi
    ng credentials: [username: test]>

    就種錯誤,可能是客戶端的那個配置文件里寫的不太對。也就是上面說的第五步,要多注意一下。

     

    java.io.IOException: Cannot recover key
            at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14Socket
    Factory.java:125)
            at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESo
    cketFactory.java:88)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoi
    nt.java:292)
            at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.j
    ava:138)
            at org.apache.catalina.connector.Connector.initialize(Connector.java:101

    這種錯誤,可能是你生成的證書有問題,如果keypass和storepass的密碼不一致也會把這個錯(不知為什么非要設(shè)成一樣的)



    眼鏡蛇

    posted on 2009-02-22 12:53 眼鏡蛇 閱讀(3707) 評論(4)  編輯  收藏 所屬分類: JavaLiferaySSO

    評論

    # re: Liferay中使用CAS實現(xiàn)單點登陸(SSO)[未登錄] 2010-01-09 11:47 ben

    我遇到過此問題,是我的jdk導(dǎo)入錯誤。
    因為我在eclipse下配置好證書,換到MyEclipse下時,默認使用的是MyEclipse的jdk,所以就出現(xiàn)了上述錯誤。
    希望能給你點幫助!  回復(fù)  更多評論   

    # re: Liferay中使用CAS實現(xiàn)單點登陸(SSO) 2010-01-26 11:07 wacel

    自己寫的portlet有自己的用戶系統(tǒng),也要用CAS實現(xiàn)單點登陸,這時的web.xml應(yīng)該怎么寫?filter的url-pattern不管怎么寫也不執(zhí)行這個filter啊!  回復(fù)  更多評論   

    # re: Liferay中使用CAS實現(xiàn)單點登陸(SSO) 2010-01-28 22:22 眼鏡蛇

    請看我的第五步,<url-pattern>/*</url-pattern><!--這里就是你要攔截的URL請求-->
    @wacel
      回復(fù)  更多評論   

    # re: Liferay中使用CAS實現(xiàn)單點登陸(SSO) 2013-10-17 13:50 張明

    好  回復(fù)  更多評論   

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人免费视频软件网站| 亚洲国产精品成人一区| 亚洲美国产亚洲AV| 国产aⅴ无码专区亚洲av麻豆| 美女在线视频观看影院免费天天看 | 国产h视频在线观看网站免费| 久久综合亚洲色hezyo| 亚洲爆乳无码专区| 日韩伦理片电影在线免费观看| 中文字幕手机在线免费看电影 | 久久精品国产96精品亚洲| 午夜无遮挡羞羞漫画免费| 中文字幕版免费电影网站| 亚洲AV成人噜噜无码网站| 亚洲电影日韩精品 | 国产午夜免费福利红片| 久久青草免费91观看| 亚洲av色香蕉一区二区三区| 亚洲成年轻人电影网站www| 国产免费直播在线观看视频| 99国产精品视频免费观看| 一区二区免费国产在线观看| 亚洲宅男天堂a在线| 国产亚洲情侣一区二区无码AV| 毛片免费观看的视频| 98精品全国免费观看视频| 日韩一区二区三区免费播放| 亚洲中文字幕AV在天堂| 久久亚洲国产精品五月天| 色播在线永久免费视频| 69精品免费视频| caoporm超免费公开视频| 久久精品亚洲一区二区三区浴池| 国产一级大片免费看| a拍拍男女免费看全片| 一级一级毛片免费播放| 亚洲高清国产拍精品青青草原 | 色费女人18女人毛片免费视频| 亚洲视频手机在线| 亚洲情XO亚洲色XO无码| 亚洲国产成人精品久久久国产成人一区二区三区综 |