yale cas 配置談

在配置YALE 的CAS裏面,走了不少彎路,到最後,終於搞好了.因此寫了一個教程.希望再次配置的人能少走彎路.
TOMCAT :tomcat-5.5.15版~~~忘記了,反正是當前最新的版本
JDK:1.5.06
環境變量要設好.
第一次發帖~~~~


1.        啓用TOMCAT的SSL
把.keystore文件複製到TOMCAT的CONF目錄下面。
在TOMCAT的主目錄的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"
               keystoreFile="conf/.keystore"
               keystorePass="changeit"
               />
其中的keystoreFile是證書庫文件,keystorePass是訪問此證書庫文件的密碼。
注:keystore文件可以用以下方法生成。
Keytool –genkey –alias hostname –keyalg RSA(在接下來的第一項是名稱,記住最好是和hostname同一名稱)執行此操作會在用戶的當前目錄(user.home)下產生一個名爲.keystore的文件。如果已經有了,將自動把新產生的KEY放進文件裏面(此次的hostname是運行CAS服務器的名字.不要搞錯,否則會在以後驗證出錯的.如果你是在本地測試,則用localhost就OK了)
2.        導入證書文件到各個應用的JRE的JVM裏面
首先產生一個證書文件,用以下方法:
Keytool –export –alias hostname –file filename.cer
這樣就在用戶當前產生了一個名爲filename.cer的文件
接下來就把此文件導入到各應用的的JVM裏面
Keytool –import –alias hostname –file filename –keystore {java_home}\jre\lib\security\cacerts
注:如果你的JAVA_HOME裏面有空格,請用引號括住。
3.        把cas.war包複製到TOMCAT的WEBAPPS下面,然後用http://localhost:8080/cas/login就可以訪問登陸了

改寫驗證方法。CAS的默認方驗證方法是用戶名和密碼相同,如果想改爲自己的驗證方式,如何做呢?你只需複製以下代碼,然後在適當的地方插入你的驗證代碼就OK了。
package org.jasig.cas.authentication.handler.support;

import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.springframework.util.StringUtils;

public final class classname extends
    AbstractUsernamePasswordAuthenticationHandler {

    public boolean authenticateUsernamePasswordInternal(
        final UsernamePasswordCredentials credentials) {
        final String username = credentials.getUsername();
        final String password = credentials.getPassword();

        if (在此插入你的驗證代碼) {
            getLog().debug(
                "User [" + username + "] was successfully authenticated.");
            return true;
        }

        getLog().debug("User [" + username + "] failed authentication");

        return false;
    }

    protected void afterPropertiesSetInternal() throws Exception {
        super.afterPropertiesSetInternal();
        getLog()
            .warn(
                this.getClass().getName()
                    + " is only to be used in a testing environment.  NEVER enable this in a production environment.");
    }
}

然後,修改deployerConfigContext.xml(在CAS的WEB-INF目錄下面)
找到
<bean                        class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
把class改爲你自己寫的驗證的類就OK了。
到此,服務器端的配置就完成了。
接下來是各個應用的配置:

4.(以JAVA的配置爲例子)把casclient.jar包複製到應用的lib目錄下面,如果沒有就創建它。然後再在應用的部署描述文件裏面(web.xml)加上filter。如下:
<filter>
    <filter-name>CAS Filter</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://casServerhost:8443/cas/login</param-value>
    </init-param>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
      <param-value>https:// casServerhost:8443/cas/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>
    </init-param>
  </filter>
<filter-mapping>
  <filter-name>CAS Filter</filter-name>
  <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

Localhost是指各個應用的服務器的名字
casServerHost是指cas服務器的名字
其中的filter-mapping就是配置哪些資源是需要通過CAS驗證的。可以配置多個。

4.        配置語言包
在cas裏面的WEB-INF\classes下面添加不同的語言包,然後再在\WEB-INF\view\jsp\default\ui\includes的top.jsp文件頂部加入<%@ page contentType="text/html; charset=gbk" language="java" %>便可以了。

一些錯誤信息:
1.        keytool 認證未輸入別名 <mykey> 已經存在
這是因爲你已經導入了一信任證書。在進行keytool –import的時候,如果沒有指定別名,則系統默任導入的證書的名字爲mykey,所以,可以先刪除此證書keytool –delete –alias mykey –keystore {java_home}\jre\lib\security\cacerts
然後再從新導入,或者指定別名導入keytool –import –alias name –keystore {java_home}\jre\lib\security\cacerts

2.        java.io.IOException: Keystore was tampered with, or password was incorrect
這個很可能你的keystore文件已經被修改了,密碼已經更改,直接刪除這個文件,再從新生成就可以了
3.        javax.servlet.ServletException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
這是因爲你沒有在應用端導入證書。在應用端執行keytool –import –alias name –file filename.cer便可以。其中的name.cer是在前面的用keytool –export導出的cer文件
  

發佈了0 篇原創文章 · 獲贊 1 · 訪問量 6652
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章