pandaAnthony:spring boot cas 服务端和spring security客户端搭建(二)

这个系列有3篇文章:

  1. spring boot cas 服务端和spring security客户端搭建(一):主要介绍怎么用spring boot cas搭建https的服务端
  2. spring boot cas 服务端和spring security客户端搭建(二):主要介绍怎么用怎么结合数据库用cas提供的动态加密方式登录及相关配置
  3. spring boot cas 服务端和spring security客户端搭建(三):主要介绍怎么结合spring security客户端进行整合及http方式登录配置

接着上篇spring boot cas 服务端和spring security客户端搭建(一)继续介绍服务端的搭建。上文已经搭建好了默认的基于https和静态用户的CAS服务端,实际中不会有项目那么处理的,需要连接数据库或者其他形式来进行用户认证;
所有配置的内容可以参考https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html
这里主要介绍连接数据库的方式。搜索‘Database Authentication’可以找到相关的内容:

可以发现DataBase Authentication分为Query Database Authentication,Search Database Authentication,Bind Database Authentication,Encode Database Authentication。
这里主要介绍下Encode Database Authentication,加密数据库验证。


image.png

所有的都是以cas.authn.jdbc.encode[0]为前缀,其中
sql表示需要查询的用户表以及登录时用户名对应的列名
passwordFiledName表示对应密码的列名
expiredFiledName表示对应失效的列名
disableFieldName表示对应禁止的列名
driverClass, dialect, url, user, password都是数据库相关的连接信息这里就不过多描述了
numberOfIterations表示加密迭代次数
numberOfIterationsFieldName表示对应的加密迭代次数的列名
saltFieldName表示用哪列作为动态的盐值
staticSalt表示静态的盐值
algorithmName表示加密算法

这里的加密方式是CAS提供的,我们看下具体是怎么验证的。在IDE中打开encode 验证的核心类QueryAndEncodeDatabaseAuthenticationHandler,找到对应的验证方法:


image.png

可以看到加密的核心方法就在digestEncodedPassword中处理的:


image.png

我们在保存密码时需要按照通用的逻辑把上面的代码抽出来,才能保证存到数据库的密码和CAS配置的加盐验证一致。以下代码仅供参考:
/**
 * cas加密工具类,参照QueryAndEncodeDatabaseAuthenticationHandler中的digestEncodedPassword实现
 * @param encodedPass
 * @param dynaSalt
 * @param staticSalt
 * @param algorithmName
 * @param numberOfIterations
 * @return
 */
public static String digestEncodedPassword (String encodedPass, String dynaSalt, String staticSalt, String algorithmName, Long numberOfIterations) {
    ConfigurableHashService hashService = new DefaultHashService();
    if (StringUtils.isNoneBlank(staticSalt)) {
        hashService.setPrivateSalt(ByteSource.Util.bytes(staticSalt));
    }
    
    hashService.setHashAlgorithmName("MD5");

    hashService.setHashIterations(numberOfIterations.intValue());

    final HashRequest request = new HashRequest.Builder()
      .setSalt(dynaSalt)
      .setSource(encodedPass)
      .build();
    return hashService.computeHash(request).toHex();
}

当然仅仅上面的配置是无法实现数据库连接的,我们需要在工程的pom文件中添加数据库包及CAS依赖才可以实现加密的数据库连接认证:


image.png

image.png

具体的数据库包根据具体使用的来定,jdbc认证需要添加cas的依赖包(版本和cas版本保持一致):

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>${cas.version}</version>
</dependency>

到这里基于CAS的数据库加密验证就结束了。其他验证方式请参考官方文档,我这边也只测试过基础的query方式,配置如下:


image.png

除去加密部分,数据库连接相关的和encode的没什么太大差异,只是前缀变成了cas.authn.jdbc.query[0],和encode相比就是encode变成了query。
其实看下源码可以发现所有的数据库验证方式都在同一个包中,具体的验证参考具体的类和方法即可:


image.png

CAS服务的数据库连接的相关配置就到这了。下篇描述下怎么和spring boot security的客户端集成,以及CAS服务端http方式的验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353