CAS登錄驗(yàn)證(密碼MD、SHA加密后再進(jìn)行Base加密實(shí)現(xiàn)代碼)與Liferay的用戶身份驗(yàn)證對應(yīng)_第1頁
CAS登錄驗(yàn)證(密碼MD、SHA加密后再進(jìn)行Base加密實(shí)現(xiàn)代碼)與Liferay的用戶身份驗(yàn)證對應(yīng)_第2頁
CAS登錄驗(yàn)證(密碼MD、SHA加密后再進(jìn)行Base加密實(shí)現(xiàn)代碼)與Liferay的用戶身份驗(yàn)證對應(yīng)_第3頁
CAS登錄驗(yàn)證(密碼MD、SHA加密后再進(jìn)行Base加密實(shí)現(xiàn)代碼)與Liferay的用戶身份驗(yàn)證對應(yīng)_第4頁
CAS登錄驗(yàn)證(密碼MD、SHA加密后再進(jìn)行Base加密實(shí)現(xiàn)代碼)與Liferay的用戶身份驗(yàn)證對應(yīng)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、定制CAS登錄驗(yàn)證,用Liferay的用戶身份進(jìn)行驗(yàn)證摘要本文以Liferay與CAS整合為例,將CAS登錄驗(yàn)證從輸入相同的用戶名/密碼定制為以Liferay的用戶身份進(jìn)行驗(yàn)證。環(huán)境MySQL5.0.5JRE Ubuntu 8.04 HYPERLINK http:/downloads.sourceforg/lportal/liferay-portal-tomcat-6.0-5.1.1.zip Liferay 5.1.1 Bundled with Tomcat 6.0 HYPERLINK /downloads/cas/cas-server-3.3-release.zip CAS HYPERLIN

2、K javascript:; t _self Server 3.3.1 HYPERLINK /downloads/cas-clients/cas-client-2.0.11.zip Yale CAS Client 2.0.11 HYPERLINK be/ NetBeans IDE 6.1在進(jìn)行本文示例前,請參考 HYPERLINK /DL88250/archive/2008/08/20/2802525.aspx 這里。新建工程打開NetBeans IDE,新建 HYPERLINK javascript:; t _self Java Class Library工程:PortalAuthHandl

3、er。添加依賴包從CAS中的lib下找到如下jar:cas-server-core-3.3.jarinspektr-core-0.7.0.jar下載spring-core.jar(2.5.5),點(diǎn) HYPERLINK http:/sourceforg/project/downloading.php?group_id=73357&use_mirror=osdn&filename=spring-framework-2.5.5.zip&94840949 這里。將這三個(gè)jar包添加到工程PortalAuthHandler下。編寫測試用例在Test Packages下建立測試用例,代碼如下:packag

4、e com.jinfonet.developer.portal;import junit.framework.TestCase;import org.jasig.cas.authentication.handler.PasswordEncoder;/* author 88250 */public final class Base64PasswordEncoderTests extends TestCase private final PasswordEncoder passwordEncoder = new Base64PasswordEncoder(SHA1);public void tes

5、tHashBase64Encoded() assertEquals(qUqP5cyxm6YcTAhz05Hph5gvu9M=, this.passwordEncoder.encode(test);public void testNullPassword() assertEquals(null, this.passwordEncoder.encode(null);public void testInvalidEncodingType() final PasswordEncoder pe = new Base64PasswordEncoder(invalid encoding);try pe.en

6、code(test);fail(exception expected.); catch (final Exception e) return;這個(gè)測試用例有三個(gè)測試方法,其中HashBase64Encoded最為重要。因?yàn)樵贚iferay的帳戶表User_中的password_字段默認(rèn)是以SHA1進(jìn)行加密,然后再以Base64進(jìn)行編碼存放的。而CAS中自帶的Password Encoder只有用加密算法進(jìn)行加密的步驟,沒有Base64編碼的步驟,所以我們要寫一個(gè)帶有Base64編碼功能的Encoder,且必須是實(shí)現(xiàn)org.jasig.cas.authentication.handler.Pas

7、swordEncoder接口的。編寫實(shí)現(xiàn)代碼注:代碼已測試。package com.jinfonet.developer.portal;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/import org.inspemon.ioc.annotation.NotNull;import org.jasig.cas.authentication.handler.PasswordEncoder;imp

8、ort org.springframework.util.StringUtils;import sun.misc.BASE64Encoder;/* author 88250 */public class Base64PasswordEncoder implements PasswordEncoder private static final char HEX_DIGITS = 0, 1, 2, 3, 4, 5,6, 7, 8, 9, a, b, c, d, e, f;/NotNullprivate final String encodingAlgorithm;private String ch

9、aracterEncoding;public Base64PasswordEncoder(final String encodingAlgorithm) this.encodingAlgorithm = encodingAlgorithm;public String encode(final String password) if (password = null) return null;try MessageDigest messageDigest = MessageDigest.getInstance(this.encodingAlgorithm);if (StringUtils.has

10、Text(this.characterEncoding) messageDigest.update(password.getBytes(this.characterEncoding); else messageDigest.update(password.getBytes();final byte digest = messageDigest.digest();return getFormattedText(digest); catch (final NoSuchAlgorithmException e) throw new SecurityException(e); catch (final

11、 UnsupportedEncodingException e) throw new RuntimeException(e);/* Takes the raw bytes from the digest and formats them correct.* param bytes the raw bytes from the digest.* return the formatted bytes.*/private String getFormattedText(byte bytes) final StringBuilder buf = new StringBuilder(bytes.leng

12、th * 2);sun.misc.BASE64Encoder e = new BASE64Encoder();final String buf2 = e.encode(bytes);for (int j = 0; j 4) & 0 x0f);buf.append(HEX_DIGITSbytesj & 0 x0f);System.out.println(Final: + buf2);System.out.println(encodingAlgorithm + : + buf);return buf2.toString();public final void setCharacterEncodin

13、g(final String characterEncoding) this.characterEncoding = characterEncoding;注意:這里,我們使用了Sun的一個(gè)受限類:BASE64Encoder。如果你自己有實(shí)現(xiàn),盡量用自己的。工程結(jié)構(gòu)截圖工程的完整結(jié)構(gòu)截圖如下:測試與打包單元測通過后到工程目錄下的dist目錄下把Build出的jar中的class文件(with package)打包到$LIFERAY_HOME/webapps/cas-web/cas-server-core-3.3.jar中。啟用定制后的登錄驗(yàn)證編輯$LIFERAY_HOME/webapps/cas

14、-web/WEB-INF/deployerConfigContext.xml文件,將替換為注意:在Liferay中最好使用screenName作為CAS驗(yàn)證的用戶名,emailAddress是不能用的,ID方式?jīng)]經(jīng)過測試。然后,在緊跟的后加入:最后,修改在文件$LIFERAY_HOME/webapps/cas-web/WEB-INF/perties中配置一下 HYPERLINK javascript:; t _self 數(shù)據(jù)庫連接,如下:#database.hibernate.dialect=org.hibernate.dialect.OracleDialectdatabase.hibernate.dialect=org.hibernate.dialect.MySQLDialect#database.hibernate.dialect=org.hibernate.dialect.HSQLDialectdb.driver=com.mysql.jdbc.Driverdb.url=jdbc:mysql:/localhos

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論