CASカスタム登録検証

4987 ワード

前の記事では、CASワンポイントでクライアントにログインしてサービス端末登録ページフォーム情報を取得する構成を紹介しています.本稿では、カスタム登録検証の操作を簡単に紹介します.前の記事に基づいてhttp://blog.csdn.net/u011012826/article/details/50800577に基づいて作ったシングルポイントをユーザー定義の検証方法に登録します.無駄話は多くなく、以下は具体的な配置情報です.
       casシングルポイント登録の登録検証情報は、/src/main/webapp/WEB-INF/deployer ConfigContintxt.xmlに配置されているauthentication Handlers配置で、authentication Handlers listは主に認証用として使用されています.このリストのすべてのbeanはAuthentication Handlerインターフェースのauthenticate方法を実現する必要がある.ユーザが認証要求を提出した後、このリストの任意の認証の条件を満たすことが認証成功となります.各beanは自分の検証方式を設定することができます.ですから、複数の認証方式のアプリケーションがある場合は、ここで自ら認証条件を組み立ててもいいです.具体的な操作は以下の通りです.
        1、自分のNbracAuthentication Handler.java類を作成してAuthentication Handlerを実現します.その中のNbrancCredentials類は前の文章の中で紹介しています.ここでは余分な紹介はしません.
import javax.sql.DataSource;

import org.jasig.cas.authentication.handler.AuthenticationException;
import org.jasig.cas.authentication.handler.AuthenticationHandler;
import org.jasig.cas.authentication.handler.NoOpPrincipalNameTransformer;
import org.jasig.cas.authentication.handler.PasswordEncoder;
import org.jasig.cas.authentication.handler.PlainTextPasswordEncoder;
import org.jasig.cas.authentication.handler.PrincipalNameTransformer;
import org.jasig.cas.authentication.principal.Credentials;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
  
public class NbrcAuthenticationHandler implements AuthenticationHandler {  
    private static final Class DEFAULT_CLASS = NbrcCredentials.class;  
  
    private PasswordEncoder passwordEncoder = new PlainTextPasswordEncoder();  
    private JdbcTemplate jdbcTemplate;  
    private DataSource dataSource;  
  
    private PrincipalNameTransformer principalNameTransformer = new NoOpPrincipalNameTransformer();  
    private Class> classToSupport = DEFAULT_CLASS;  
    private boolean supportSubClasses = true;  
    @Override  
    public boolean authenticate(Credentials credentials) throws AuthenticationException {  
        final NbrcCredentials nc = (NbrcCredentials) credentials;  
        final String username = getPrincipalNameTransformer().transform(nc.getUsername());  
        final String password = nc.getPassword();  
            try {  
                String sql = "SELECT pwd FROM user WHERE user_name = ? ";  
                String dbPassword = getJdbcTemplate().queryForObject(  
                        sql  
                        , String.class, username); 
                return dbPassword.equals(password);  
            } catch (final IncorrectResultSizeDataAccessException e) {  
                // this means the username was not found.  
                return false;  
            }  
    }  
  
    @Override  
    public boolean supports(Credentials credentials) {  
        return credentials != null  
                && (this.classToSupport.equals(credentials.getClass()) || (this.classToSupport  
                .isAssignableFrom(credentials.getClass()))  
                && this.supportSubClasses);  
    }  
  
    public PasswordEncoder getPasswordEncoder() {  
        return passwordEncoder;  
    }  
  
    public void setPasswordEncoder(PasswordEncoder passwordEncoder) {  
        this.passwordEncoder = passwordEncoder;  
    }  
  
    public PrincipalNameTransformer getPrincipalNameTransformer() {  
        return principalNameTransformer;  
    }  
  
    public void setPrincipalNameTransformer(PrincipalNameTransformer principalNameTransformer) {  
        this.principalNameTransformer = principalNameTransformer;  
    }  
  
    public final void setDataSource(final DataSource dataSource) {  
        this.jdbcTemplate = new JdbcTemplate(dataSource);  
        this.dataSource = dataSource;  
    }  

    protected final JdbcTemplate getJdbcTemplate() {  
        return this.jdbcTemplate;  
    }  
  
    protected final DataSource getDataSource() {  
        return this.dataSource;  
    }  
}  
2、既存システムの検証方法を自己定義の検証方法に置き換えます./src/main/webapp/WEB-INF/deployer ConfigContect.xmlのauthentication Handlers配置
変更前:
                                                  class=「org.jasig.cas.authentication.handle.support.HttpBasedServiceCredentials Authentication Handler」                    p:http Client-ref=「http Client」p:require Secure=「false」/>                                                                                                                                   
   
変更後: 
                                                  class=「org.jasig.cas.authentication.handle.support.HttpBasedServiceCredentials Authentication Handler」                    p:http Client-ref=「http Client」p:require Secure=「false」/>                                                                                                      
このように、ログインして提出すると、NbracAuthentication Handlerにログインして検証し、カスタマイズ登録の機能を実現し、NbracAuthentication Handlerにおいて独自の検証方法をカスタマイズすることができる.