cas单点登录系统搭建、配置、扩展

环境信息

节点 已安装软件 系统配置
node8 apache-tomcat-8.0.53.tar.gz;jdk-8u181-linux-x64.tar.gz centos7.2

一.安装 cas单点登录系统

1.下载源码,编译

cas-server-4.0.0-release.zip 下载地址

2.进入 cas-server-4.0.0\cas-server-webapp 编译

    mvn clean install (mvn clean package)

注意: CAS_HOME/src/licensing/header.txt not found in file system, classpath or URL: unknown

去其他高版本的目录下把证书拷过来就可以了

编译成功在target目录下得到:cas.war

3.把 cas.war移动到tomcat的webapp目录下启动

mv cas.war /usr/local/apache-tomcat-8.0.53/webapps/
cd /usr/local/apache-tomcat-8.0.53/logs
../bin/startup.sh

4.访问 cas使用默认用户名密码验证是否安装成功

http://192.168.56.128:8080/cas/login
账号:casuser
密码:Mellon

二.配置 cas 单点登录系统

1.修改 deployerConfigContext.xml

1.去掉系统默认的用户名和密码
cas单点登录系统搭建、配置、扩展_第1张图片
2.添加 使用数据库校验
cas单点登录系统搭建、配置、扩展_第2张图片
3.添加使用本地数据库配置
cas单点登录系统搭建、配置、扩展_第3张图片

2.去掉https验证

cas-4.0.0-server 去掉https验证

3.使用两个实例工程验证

下载地址

cas-client

1.请求 http://cas-client:8080/cas-client1/index.jsp
cas单点登录系统搭建、配置、扩展_第4张图片
2.登录成功
cas单点登录系统搭建、配置、扩展_第5张图片
3.跳转到cas-client2
cas单点登录系统搭建、配置、扩展_第6张图片

三、拓展cas认证服务

1.需求

cas4.0 默认只支持用户名登录,业务需求需要支持 用户名、邮箱等其他信息登录。

2.解决方案,拓展 QueryDatabaseAuthenticationHandler.Java

修改 deployerConfigContext.xml

<!-- 访问本地数据库 -->
<bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.MultiQueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:passwordEncoder-ref="passwordEncoder"
      p:sql="select lower(ENCRYPTED_USER_PASSWORD) from sys_user
                   where su.user_name=upper(?)
                      or su.mobile_phone=?
                      or su.email=?
                      or su.tel=?"/>
/**
 * 多条件查询用户密码
 *
 * @author jinliang 2018/11/24 16:35
 */
public class MultiQueryDatabaseAuthenticationHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler {

    @NotNull
    private String sql;

    @Override
    protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential) throws GeneralSecurityException, PreventedException {
        final String username = credential.getUsername();
        final String encryptedPassword = this.getPasswordEncoder().encode(credential.getPassword());
        try {
            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, username,username,username);
            if (!dbPassword.equals(encryptedPassword)) {
                throw new FailedLoginException("Password does not match value on record.");
            }
        } catch (final IncorrectResultSizeDataAccessException e) {
            if (e.getActualSize() == 0) {
                throw new AccountNotFoundException(username + " not found with SQL query");
            } else {
                throw new FailedLoginException("Multiple records found for " + username);
            }
        } catch (final DataAccessException e) {
            throw new PreventedException("SQL exception while executing query for " + username, e);
        }
        return createHandlerResult(credential, new SimplePrincipal(username), null);
    }

    /**
     * 设置 sql
     * @param sql
     */
    public void setSql(String sql) {
        this.sql = sql;
    }
}

3.CAS多条件登录后返回用户信息

参考 CAS多条件登录后返回用户信息

你可能感兴趣的:(Architect)