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

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

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

    Junky's IT Notebook

    統(tǒng)計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    CAS中使用自己的Credentials(轉)

    Yale CAS 3.1
    下載: http://www.ja-sig.org/products/cas/index.html

    1. 修改authenticationViaFormAction以使用自己的Credentials

    默認的org.jasig.cas.authentication.principal.UsernamePasswordCredentials只記錄用戶名和密碼,在擴展一些屬性如驗證碼時使用用自己的Credentials類替換

    cas-servlet.xml:
    <bean id="authenticationViaFormAction" class="org.jasig.cas.web.flow.AuthenticationViaFormAction"
       p:centralAuthenticationService-ref="centralAuthenticationService"
       p:warnCookieGenerator-ref="warnCookieGenerator"
       p:formObjectName="credentials"
       p:formObjectClass="com.nlcd.cas.authentication.principal.EcardCredentials">
          <property name="validator">  
              <bean class="com.nlcd.cas.validation.EcardCredentialsValidator"/>
          </property>
    </bean>

    EcardCredentialsValidator:
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    import com.nlcd.cas.authentication.principal.EcardCredentials;

    public final class EcardCredentialsValidator implements Validator {

         public boolean supports(final Class clazz) {
             return EcardCredentials.class.isAssignableFrom(clazz);
         }

         public void validate(final Object o, final Errors errors) {
             ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username",
                 "required.username", null);
             ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password",
                 "required.password", null);
         }
    }

    EcardCredentials: (加入一個idtype屬性)
    import org.jasig.cas.authentication.principal.Credentials;

    public class EcardCredentials implements Credentials {

    /** Unique ID for serialization. */
    private static final long serialVersionUID = -7863273946921255486L;

    private String idtype;

    /** The username. */
         private String username;

         /** The password. */
         private String password;

         public String getIdtype() {
       return idtype;
    }

    public void setIdtype(String idtype) {
       this.idtype = idtype;
    }

    /**
          * @return Returns the password.
          */
         public final String getPassword() {
             return this.password;
         }

         /**
          * @param password The password to set.
          */
         public final void setPassword(final String password) {
             this.password = password;
         }

         /**
          * @return Returns the userName.
          */
         public final String getUsername() {
             return this.username;
         }

         /**
          * @param userName The userName to set.
          */
         public final void setUsername(final String userName) {
             this.username = userName;
         }

         public String toString() {
             return this.username;
         }

         public boolean equals(final Object obj) {
             if (obj == null || !obj.getClass().equals(this.getClass())) {
                 return false;
             }

             final EcardCredentials c = (EcardCredentials) obj;

             return this.idtype.equals(c.getIdtype()) && this.username.equals(c.getUsername())
                 && this.password.equals(c.getPassword());
         }

         public int hashCode() {
             return this.idtype.hashCode() ^ this.username.hashCode() ^ this.password.hashCode();
         }
    }

    2. 部署自己的authenticationHandlers

    deployerConfigContext.xml:
    <property name="credentialsToPrincipalResolvers">
        <list>
         <bean
          class="com.nlcd.cas.authentication.principal.EcardCredentialsToPrincipalResolver" />
         <bean
          class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
        </list>
       </property>

       <property name="authenticationHandlers">
        <list>
         <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
          p:httpClient-ref="httpClient" />
         <bean
          class="com.nlcd.cas.authentication.handler.support.EcardAuthenticationHandler" />
        </list>
       </property>

    EcardCredentialsToPrincipalResolver:
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver;
    import org.jasig.cas.authentication.principal.Credentials;
    import org.jasig.cas.authentication.principal.Principal;
    import org.jasig.cas.authentication.principal.SimplePrincipal;

    public final class EcardCredentialsToPrincipalResolver implements
         CredentialsToPrincipalResolver {

         /** Logging instance. */
         private final Log log = LogFactory.getLog(getClass());

         public Principal resolvePrincipal(final Credentials credentials) {
             final EcardCredentials ecardCredentials = (EcardCredentials) credentials;

             if (log.isDebugEnabled()) {
                 log.debug("Creating SimplePrincipal for ["
                     + ecardCredentials.getUsername() + "]");
             }

             return new SimplePrincipal(ecardCredentials.getUsername());
         }

         public boolean supports(final Credentials credentials) {
             return credentials != null
                 && EcardCredentials.class.isAssignableFrom(credentials
                     .getClass());
         }
    }

    EcardAuthenticationHandler:
    import org.jasig.cas.authentication.handler.AuthenticationException;
    import org.jasig.cas.authentication.handler.AuthenticationHandler;
    import org.jasig.cas.authentication.principal.Credentials;
    import org.jasig.cas.util.annotation.NotNull;
    import com.nlcd.cas.authentication.principal.EcardCredentials;

    public final class EcardAuthenticationHandler implements AuthenticationHandler {

    private static final Class<EcardCredentials> DEFAULT_CLASS = EcardCredentials.class;

    /** Class that this instance will support. */
    @NotNull
    private Class<?> classToSupport = DEFAULT_CLASS;

    private boolean supportSubClasses = true;

    public EcardAuthenticationHandler() {
    }

    public final boolean authenticate(final Credentials credentials)
        throws AuthenticationException {
       //TODO: your code here
       return true;
    }

    public final boolean supports(final Credentials credentials) {
       return credentials != null
         && (this.classToSupport.equals(credentials.getClass()) || (this.classToSupport
           .isAssignableFrom(credentials.getClass()))
           && this.supportSubClasses);
    }
    }

    3. 配置Tomcat使用SSL安全認證

    生成服務器端密鑰:
    keytool -genkey -alias nlcdcas -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
    您的名字與姓氏是什么?
      [192.168.61.56]:  192.168.61.56
    您的組織單位名稱是什么?
      [nlce]:  nlcd
    您的組織名稱是什么?
      [Unknown]:  nlcd
    您所在的城市或區(qū)域名稱是什么?
      [Unknown]:  beijing
    您所在的州或省份名稱是什么?
      [Unknown]:  beijing
    該單位的兩字母國家代碼是什么
      [Unknown]:  cn
    CN=192.168.61.56, OU=nlcd, O=nlcd, L=beijing, ST=beijing, C=cn 正確嗎?
      [否]:  y

    生成服務器端證書:
    keytool -export -alias nlcdcas -storepass changeit -file server.cer -keystore server.keystore

    導入證書文件到cacerts 文件中:
    keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit

    cacerts文件,拷貝到<JAVA_HOME>\jre\lib\security目錄下;server.keystore拷貝到Tomcat安裝目錄下

    修改Tomcat的配置文件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" />

    加入紅字部份后的內容如下:

             <Connector port="8443" maxHttpHeaderSize="8192"

    keystorePass="changeit" keystoreFile="/server.keystore"

                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                   enableLookups="false" disableUploadTimeout="true"

                   acceptCount="100" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS" />

    posted on 2007-08-20 13:58 junky 閱讀(3569) 評論(1)  編輯  收藏 所屬分類: security

    評論

    # re: CAS中使用自己的Credentials(轉) 2008-05-04 19:56 guest

    那么在哪里獲取session里存儲的驗證碼呢?  回復  更多評論   

    主站蜘蛛池模板: 亚洲午夜一区二区电影院| 亚洲天堂免费在线| 成年人网站免费视频| 狠狠亚洲狠狠欧洲2019| 亚洲精品中文字幕无乱码麻豆 | 国产一区二区三区亚洲综合 | 小草在线看片免费人成视久网| 免费无码成人AV片在线在线播放| 亚洲精品亚洲人成人网| 亚洲va无码专区国产乱码| 久久丫精品国产亚洲av不卡| rh男男车车的车车免费网站| 免费理论片51人人看电影| 亚洲第一精品电影网| 黄网站色视频免费看无下截| 成年女人毛片免费视频| 国产日韩亚洲大尺度高清| 豆国产96在线|亚洲| 亚洲人成电影网站免费| 国产成人亚洲精品青草天美| 瑟瑟网站免费网站入口| 曰批全过程免费视频在线观看| 人人狠狠综合久久亚洲88| 羞羞网站在线免费观看| 免费又黄又爽又猛的毛片| 久久精品国产亚洲综合色| 国产精品免费久久久久影院 | 亚洲欧洲成人精品香蕉网| 激情小说亚洲图片| 国产午夜鲁丝片AV无码免费| 亚洲男人天堂影院| 国产免费内射又粗又爽密桃视频 | 99久久精品毛片免费播放| 在线观看免费高清视频| 亚洲婷婷综合色高清在线| 久久青草免费91线频观看不卡| 亚洲中久无码永久在线观看同| 国产精品九九久久免费视频| 中文字幕亚洲电影| 91免费国产视频| 在线亚洲精品福利网址导航|