CAS自定义登录验证

      上一篇文章介绍了CAS单点登录客户端获取服务端登录页面表单信息的配置,本篇文章简单介绍一下自定义登录验证的操作,基于上一篇文章http://blog.csdn.net/u011012826/article/details/50800577的基础上做的单点登录自定义验证方法,废话不多说,以下为具体的配置信息:

       cas单点登录的登录验证信息,配置在/src/main/webapp/WEB-INF/deployerConfigContext.xml中的authenticationHandlers配置,authenticationHandlers list主要是用来做认证用的。该list中所有的bean都需要实现AuthenticationHandler接口中的authenticate方法。用户提交认证请求之后,要满足该list中任意认证的条件才算是认证成功。每一个bean都可以配置自己的验证方式。所以,对于有多个认证方式的应用的时候,在这里自行组装认证条件就可以。具体的操作如下:

        1、创建自己的NbrcAuthenticationHandler.java类实现AuthenticationHandler,如下:其中的NbrcCredentials类在上一篇文章中有做介绍,这里不做多余的介绍。

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<NbrcCredentials> 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/deployerConfigContext.xml中的authenticationHandlers配置

修改前:

<property name="authenticationHandlers">
            <list>
                <bean
                    class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
                    p:httpClient-ref="httpClient" p:requireSecure="false" />
                <!-- 用户密码认证配置  -->
                <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
                    <property name="dataSource" ref="dataSource"></property>
                    <property name="sql" value="SELECT pwd FROM user WHERE user_name = ? "></property>
                   <!-- <property name="passwordEncoder" ref="MD5PasswordEncoder"></property> 用户密码加密认证,需要时开启-->
                </bean>
            </list>
        </property>

   

修改后: 

<property name="authenticationHandlers">
            <list>
                <bean
                    class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
                    p:httpClient-ref="httpClient" p:requireSecure="false" />
                <!-- 用户密码认证配置  -->
                 <bean class="com.casServer.NbrcAuthenticationHandler" >  
                        <property name="dataSource" ref="dataSource"></property>  
                </bean>  
            </list>
        </property>


这样,当登录提交的时候,就会进入到NbrcAuthenticationHandler中进行验证,从而实现自定义登录的功能,在NbrcAuthenticationHandler中可以自定义自己的验证方法。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值