CAS自定义登录验证
2016-03-04 14:45
363 查看
上一篇文章介绍了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类在上一篇文章中有做介绍,这里不做多余的介绍。
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中可以自定义自己的验证方法。
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中可以自定义自己的验证方法。
相关文章推荐
- redis 3.0的集群部署
- 安卓计算APK的应用大小、数据大小、缓存大小等。
- diference between support vectors and boundary vectors.
- Android入门2:从GridView控件使用到自定义Adapter
- 01_Hadoop学习笔记内容说明
- EF DataBase First生成model的验证
- K-shingling
- discuz不小心删除掉了一个用户,这样恢复!
- 在ASP.NET程序中存储和调用word文件
- Java提高篇—–Java集合细节(三):subList的缺陷
- 怎样启动 停止 重启MySQL数据库服务器
- 线程特定数据TSD及其实现原理
- Java Spring 框架整理
- 分支、主干合并(SVN)
- 分布式与集群的区别
- iOS动画
- C/C++面试常见的几个库函数详解(strcpy,memcpy,memset,atoi...)
- CART: 分类与回归树
- 前端优化杂谈(一)
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10