阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

修改CAS源码使基于DB的认证方式配置更灵活

456次阅读
没有评论

共计 4756 个字符,预计需要花费 12 分钟才能阅读完成。

最近在做 CAS 配置的时候,遇到了数据源不提供密码等数据的情况下,怎样实现密码输入认证呢?

第一步:新建 Java 项目,根据假面算法生成 CAS 加密工具

出于保密需要不提供自定义的加密工具,在您的实际项目中,你可采用 cas 默认的加密方式比如 md5.

第二步:修改 CAS 源码

找到 cas-server-support-jdbc 子模块找到包路径 cas-server-support-jdbc\src\main\java\org\jasig\cas\adaptors\jdbc\,在复制一份 QueryDatabaseAuthenticationHandler.java 并重新命名未 TyQueryDatabaseAuthenticationHandler.java(记得修改并确保类名与文件名一致)

修改代码至如下

package org.jasig.cas.adaptors.jdbc;

import java.security.GeneralSecurityException;

import org.jasig.cas.authentication.HandlerResult;
import org.jasig.cas.authentication.PreventedException;
import org.jasig.cas.authentication.UsernamePasswordCredential;
import org.jasig.cas.authentication.principal.SimplePrincipal;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;

import javax.security.auth.login.AccountNotFoundException;
import javax.security.auth.login.FailedLoginException;
import javax.validation.constraints.NotNull;

/**
 * Class that if provided a query that returns a password (parameter of query
 * must be username) will compare that password to a translated version of the
 * password provided by the user. If they match, then authentication succeeds.
 * Default password translator is plaintext translator.
 *
 * @author Scott Battaglia
 * @author Dmitriy Kopylenko
 * @author Marvin S. Addison
 *
 * @since 3.0
 */
public class TyQueryDatabaseAuthenticationHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler {

    @NotNull
    private String sql;

    private boolean useDefaultPassword;

    private String defaultPassword;

    /** {@inheritDoc} */
    @Override
    protected final HandlerResult authenticateUsernamePasswordInternal(final UsernamePasswordCredential credential)
            throws GeneralSecurityException, PreventedException {

        final String username = credential.getUsername();
        final String password = useDefaultPassword ? defaultPassword : credential.getPassword();
        final String encryptedPassword = this.getPasswordEncoder().encode(password);
        try {
            final String dbPassword = getJdbcTemplate().queryForObject(this.sql, String.class, 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);
    }

    /**
    * @param sql The sql to set.
    */
    public void setSql(final String sql) {
        this.sql = sql;
    }

    /**
    * @param iSUSEDefaultPassword The useDefaultPassword to set.
    */
    public void setUseDefaultPassword(final boolean isUseDefaultPassword) {
        this.useDefaultPassword = isUseDefaultPassword;
    }

    /**
    * @param defaultPassword The defaultPassword to set.
    */
    public void setDefaultPassword(final String defaultPassword) {
        this.defaultPassword = defaultPassword;
    }

}

第三步:修改你的 CAS 部署包代码
解压你的部署包,找到文件 deployerConfigContext.xml
如果你的代码修改代码如下:

<bean id=”dbAuthenticationHandler”
    class=”org.jasig.cas.adaptors.jdbc.TyQueryDatabaseAuthenticationHandler”>
      <property name=”dataSource” ref=”dataSource”></property>
      <property name=”sql” value=”select EmpPass as password from SsoAccount where EmpCode=? “></property>
      <property name=”passwordEncoder” ref=”passwordEncoder”></property>
      <property name=”useDefaultPassword” value=”true”></property>
      <property name=”defaultPassword” value=”111111″></property>
  </bean>

id=dbAuthenticationHandle 的 bean 表示登录账号以及密码的认证方式处理配置,该配置被 id=authenticationManager 的 bean 配置所引用

配置代码 dbAuthenticationHandler 中的 TyQueryDatabaseAuthenticationHandler 是上述自定义实现的代码,新增 2 属性,userDefaultPassword=true 表示服务端验证登录页面提交的密码的时候,t 提交的密码不作为实际的密码来源,而是从属性 defaultPassword 中取值, 反之 userDefaultPassword=false 表示登录页面提交的密码作为服务端认证密码的密码来源。此处的 11111 模拟的是登录密码输入的密码,因此它是明文的,实际上用户是看不到这个密码的,而数据库里面存的不是 111111 而是 111111 经过加密后的密文,在内部进行 111111 进行验证的时候是需要对 111111 进行加密的。具体的加密过程是根据您的配置来实现的,本处则以上述第二步提到的方式为参考, 实际上加密这块你可自行定制.

datasSoure 的配置本文不予列出

第四步:编译 cas-server-support-jdbc

由于 cas 本文所采用的版本是基于 mvn 开发的,实际版本号是 4.0.0,因此需要通过 mvn 口令来编译,实际操作如下:

打开 cas-server-support-jdbc 源码所在文件夹, 快捷组合 ctrl+shift+ 鼠标右键 (如果你左右键是反的请切换为鼠标右键) 打开控制台, 输入命令 mvn clean compile 回车进行编译

打开便后的目录 cas-server-support-jdbc\target\classes\org\jasig\cas\adaptors\jdbc\, 在此处你会找到 TyQueryDatabaseAuthenticationHandler.class 二进制文件

第五步:打包 jar 文件

打开 cas-server-support-jdbc\target\classes\,快捷组合 ctrl+shift+ 鼠标右键打开控制台,输入口令 jar -cvf cas-server-support-jdbc-4.0.0.jar org 回车就生成了 jar 包文件

包文件名称解释:“cas-server-support-jdbc”表示 mvn 项目自模块名“-4.0.0”表示你的 mvn 主项目的版本号,mvn 的子模块的版本号应与 mvn 主项目版本号保持一致

第六步:部署

复制上述编译出来的 cas-server-support-jdbc-4.0.0.jar 文件至您的 cas 部署包下面的 lib 目录下面,再按照上述第三步修改配置文件.Ok 此时修改打包并部署完成。此时重启 tomact 访问你的网站飞起来可以看看效果了。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143333.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4756字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19356
评论数
4
阅读量
8279073
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

  免费获得大模型的 Api-Key 的方法:英伟达提供 GLM-4.7、Minimax M2.1 ...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

免费获得大模型的Api-Key的方法:英伟达提供GLM-4.7、Minimax M2.1模型和GitHub的AI大模型API申请

  免费获得大模型的 Api-Key 的方法:英伟达提供 GLM-4.7、Minimax M2.1 ...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...