CAS自定义登录验证方法

CAS认证流程如下图:

CAS服务器的org.jasig.cas.authentication.AuthenticationManager负责基于提供的凭证信息进行用户认证。与Spring Security很相似,实际的认证委托给了一个或多个实现了org.jasig.cas.authentication.handler.AuthenticationHandler接口的处理类。

最后,一个org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver用来将传递进来的安全实体信息转换成完整的org.jasig.cas.authentication.principal.Principal(类似于Spring Security中UserDetailsService实现所作的那样)。

二、自定义登录认证

如果需要实现自定义登录,只需要实现org.jasig.cas.authentication.handler.AuthenticationHandler接口即可,当然也可以利用已有的实现,比如创建一个继承自 org.jasig.cas.adaptors.jdbc.AbstractJdbcUsernamePasswordAuthenticationHandler的类,,实现方法可以参考org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler类:

package org.jasig.cas.adaptors.jdbc;import org.jasig.cas.authentication.handler.AuthenticationException;import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;import org.springframework.dao.IncorrectResultSizeDataAccessException;import javax.validation.constraints.NotNull;QueryDatabaseAuthenticationHandler extendsAbstractJdbcUsernamePasswordAuthenticationHandler {@NotNullprivate String sql;authenticateUsernamePasswordInternal(final UsernamePasswordCredentials credentials) throws AuthenticationException {final String username = getPrincipalNameTransformer().transform(credentials.getUsername());final String password = credentials.getPassword();final String encryptedPassword = this.getPasswordEncoder().encode(password);try {final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username);return dbPassword.equals(encryptedPassword);} catch (final IncorrectResultSizeDataAccessException e) {;}}/*** @param sql The sql to set.setSql(final String sql) {this.sql = sql;}}遇见你,是我一生的幸运;爱上你,

CAS自定义登录验证方法

相关文章:

你感兴趣的文章:

标签云: