cas单点登录-jdbc认证(三)

前言

 本节的内容为JDBC认证,查找数据库进行验证,其中包括:

  • 密码加密策略(无密码,简单加密,加盐处理)
  • 认证策略(jdbc)

一、业务需求

不同的公司,需求业务需求或者架构不一样导致我们实现验证的方式不一样,那么cas为我们提供了很多认证的模式(当然也可以自定义),其中常用的有:

  • JDBC认证
  • LDAP认证
  • Basic认证
  • Shiro认证
  • Pac4j认证
  • MongoDB认证
  • Rest认证
  • IP黑白名单

还有可能交给第三方认证,例如:微信、QQ、新浪,github等等

当然也有一些公司或者企业也非常的变态,如:

  1. 认证中心不能直接访问账号库,cas也提供功能,可以考虑用REST认证模块来处理这个事情
  2. 老系统账号唯一性不确定,例如 组织+账号 才是唯一值,这时候只能自定义认证器(后面章节会有教程)
  3. 业务系统要求返回用户密码(多属性返回)

二、加密方案

cas支持jdbc校验方案:

  • 根据sql给予用户名进行查询,根据密码字段进行鉴定(select * from table_users where username=?)可判断有效等
  • 通过盐等手段进行编码加密再进行匹配(推荐)
  • 根据sql给予用户名以及密码进行查询(select count(x) from tables_users where username = ? and password=?),不可判断有效期,若数量大于0则成功
  • 根据用户名密码连接数据库,原理是通过jdbc,若连接成功则成功

下文会讲述前两种的配置方法


常用单向加密算法:MD5、SHA、HMAC

一般的加密策略的三种:

  • 单项加密算法(密码)
  • 单向加密算法(密码+动态盐+私有盐)*加密次数(推荐
  • 不加密(不推荐

上述提到的加密方案策略,下面都会一一说明白

三、Jdbc认证

3.1、创建数据库cas,新增一张用户表sys_user

说明:

  • expired字段表示过期,1表示已过期,需要修改密码
  • disabled表示账号是否禁用,1表示禁用

3.2、sys_user表数据

idusernamepasswordexpiredemaildisabled
1admin845d5f1153c27beed29f4796404451480 1
2jackycaf1a3dfb505ffed0d024130f58c5cfa1 0
4zhangsan68053af2923e00204c3ca7c6a3150cf70 0

说明:

  • 如果采用MD5加密,那password就是MD5加密后的密文,sha同样如此
  • admin、jacky、zhangsan明文密码分别是xiaoxiao、321、789

3.2、修改sso-server/pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.carl.auth</groupId><artifactId>sso</artifactId><version>1.0.0</version><relativePath>../pom.xml</relativePath></parent><artifactId>sso-server</artifactId><packaging>war</packaging><name>sso-server</name><description>CAS认证服务,负责各系统的鉴权的鉴权</description><dependencies><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp-tomcat</artifactId><version>${cas.version}</version><type>war</type><scope>runtime</scope></dependency><!--新增支持jdbc验证--><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jdbc</artifactId><version>${cas.version}</version></dependency><!--使用mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-bom</artifactId><version>${cas.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>com.rimerosolutions.maven.plugins</groupId><artifactId>wrapper-maven-plugin</artifactId><version>0.0.5</version><configuration><verifyDownload>true</verifyDownload><checksumAlgorithm>MD5</checksumAlgorithm></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${springboot.version}</version><configuration><mainClass>org.springframework.boot.loader.WarLauncher</mainClass><addResources>true</addResources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.1.0</version><configuration><warName>cas</warName><failOnMissingWebXml>false</failOnMissingWebXml><recompressZippedFiles>false</recompressZippedFiles><archive><compress>false</compress><manifestFile>${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp-tomcat/META-INF/MANIFEST.MF</manifestFile></archive><overlays><overlay><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp-tomcat</artifactId></overlay></overlays></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version></plugin></plugins><finalName>cas</finalName></build>
</project>

 3.3、application.properties新增配置

#jdbc验证配置
#Query Database Authentication 数据库查询校验用户名开始
#查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from sys_user where username=?
#指定上面的sql查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段,1为过期,若过期需要修改密码
cas.authn.jdbc.query[0].fieldExpired=expired
#为不可用字段段,1为不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled
#数据库方言hibernate的知识
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#数据库驱动 
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:53306/cas?useUnicode=true
&characterEncoding=UTF-8
#数据库用户名
cas.authn.jdbc.query[0].user=root
#数据库密码
cas.authn.jdbc.query[0].password=123456
#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
#Query Database Authentication 数据库查询校验用户名结束 #jdbc验证配置

以上配置,如驱动,查询数据库等等需要根据不同的场景进行调整

  • 若密码无加密,调整passwordEncoder.type=NONE
  • 若密码加密策略为SHA,调整passwordEncoder.encodingAlgorithm=SHA
  • 若算法为自定义,实现org.springframework.security.crypto.password.PasswordEncoder接口,并且把类名配置在passwordEncoder.type

3.4、执行流程

例如:输入admin/xiaoxiao

 

3.5、对密码进行盐值处理再加密,application.properties配置文件修改

#Encode Database Authentication 开始
#加密次数
cas.authn.jdbc.encode[0].numberOfIterations=2
#该列名的值可替代上面的值,但对密码加密时必须取该值进行处理
cas.authn.jdbc.encode[0].numberOfIterationsFieldName=
# 盐值固定列
cas.authn.jdbc.encode[0].saltFieldName=username
#静态盐值
cas.authn.jdbc.encode[0].staticSalt=.
cas.authn.jdbc.encode[0].sql=select * from sys_user_encode where username=?
#对处理盐值后的算法
cas.authn.jdbc.encode[0].algorithmName=MD5
cas.authn.jdbc.encode[0].passwordFieldName=password
cas.authn.jdbc.encode[0].expiredFieldName=expired
cas.authn.jdbc.encode[0].disabledFieldName=disabled
cas.authn.jdbc.encode[0].url=jdbc:hsqldb:mem:cas-hsql-database
cas.authn.jdbc.encode[0].dialect=jdbc:mysql://localhost:53306/cas?useUnicode=true&characterEncoding=UTF-8
cas.authn.jdbc.encode[0].user=root 
cas.authn.jdbc.encode[0].password=123456
cas.authn.jdbc.encode[0].driverClass=
com.mysql.jdbc.Driver

#Encode Database Authentication 结束

4、验证

4.1、输入admin/xiaoxiao

 

 4.2、输入、jacky/321

 

4.3、输入zhangsan/789

5、总结 

  • pom.xm配置引入jdbc支持包,和 数据库驱动包 
  • application.properties增加数据连接配置和加密方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

get clone 出现 fatal: the remote end hung up unexpectedly5 MiB | 892.00 KiB/s 报错信息

fatal: the remote end hung up unexpectedly5 MiB | 892.00 KiB/s 解决方案 &#xff08;亲测有效&#xff09; 解决方案如下&#xff1a; git clone时加上 --depth1&#xff0c;比如&#xff1a; git clone https://gitee.com/songyitian/tctm.git --depth 1depth用于指定…

mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)

博主将会针对Java面试题写一组文章&#xff0c;包括J2ee&#xff0c;SQL&#xff0c;主流Web框架&#xff0c;中间件等面试过程中面试官经常问的问题&#xff0c;欢迎大家关注。一起学习&#xff0c;一起成长&#xff0c;文章底部有面试题。入参映射关键字说明图中paramenterTy…

php输出多余的空格或者空行

1&#xff0c;文件是否有bom。可以通过脚步检测&#xff0c;或者利用notepa打开&#xff0c;查看编码格式。 2. <?php echo something; ?> 或许是你的php标签外&#xff0c;有空格或者空行。一般的项目都是用框架&#xff0c;包含很多的文件&#xff0c;如果一个个文…

执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误

执行git命令时出现fatal: ‘origin’ does not appear to be a git repository错误 在执行git pull origin master时出现&#xff1a;   fatal: ‘origin’ does not appear to be a git repository   致命提示:“origin”看起来不是一个git存储库   fatal: Could not r…

蒋涛作序盛赞Leo新作为“程序员职场实用百科全书”——《程序员羊皮卷》连载(1)

《程序员羊皮卷》当当购买地址&#xff1a;http://product.dangdang.com/product.aspx?product_id20691986 互动购买地址&#xff1a;http://www.china-pub.com/196049 程序员行业从外面看起来有很多绚丽的光环&#xff0c;这里有无数以程序致富的天才&#xff0c;世界首富比…

matlab ones函数_Matlab中相见恨晚的命令(持续更新)

知乎上有个“有哪些让人相见恨晚的Matlab命令”的话题&#xff0c;很多答主提供的命令确实很实用&#xff0c;为了更方便大家的学习&#xff0c;我就知乎上的答案和我自己想到的都综合整理成了一篇文章&#xff0c;把我觉得很实用的指令整理出来。知乎原答案链接dbstop if erro…

机器学习之特征工程

特征工程-概念 特征工程是一个面向十分广的概念&#xff0c;只要是在处理数据就可以认为是在做特征工程。个人理解&#xff0c;真正意义上的特征工程还是数据降维和数据升维的过程。 而前期对数据的处理过程&#xff1a; 需要哪些数据&#xff1f;数据如何存储&#xff1f;数…

ArcGIS AO开发高亮显示某些要素

参考代码1 ifeaturecursor pcur ifeatureclass.search(iqueryfilter pfilter); pfilter.whereclause strAddress; //输入查询条件&#xff0c;也就是你寸地址的字段名didian ifeature pfeat pcur.nextfeature();// 如果pCur多个要素&#xff0c;则可以考虑将其合并并一起高亮…

Oracle传输表空间介绍

传输表空间通过拷贝数据文件的方式&#xff0c;实现可跨平台的数据迁移&#xff0c;效率远超expdp/impdp, exp/imp等工具。还可以应用跨平台&数据库版本迁移表数据、归档历史数据和实现表空间级时间点数据恢复等场景。转载于:https://www.cnblogs.com/ilifeilong/p/7712654…

git push到GitHub的时候遇到! [rejected] master -> master (non-fast-forward)的问题

git push到GitHub的时候遇到! [rejected] master -> master (non-fast-forward)的问题 解决方法&#xff1a; 1、git pull origin master --allow-unrelated-histories //把远程仓库和本地同步&#xff0c;消除差异 2、重新add和commit相应文件 3、git push origin maste…

程序员考核的五大死因(上)

程序员作为企业开发力量的最核心资产&#xff0c;无疑得到公司从上至下的一致关注。开发是个智力密集型产业&#xff0c;程序开发的特点是&#xff0c;付出相同时间的情况下&#xff0c;两个开发者之间的产能会相差十几甚至几十倍。软件开发人员向来以“不容易考核、工作不容易…

du -sh 如何找到最大的文件夹_小白必看!手把手教你如何在linux上安装redis数据库...

首先我们要清楚redis是什么&#xff1f;redis是一种非关系型数据库&#xff0c;它与MySQL的这种关系型数据库不同&#xff0c;MySQL是将数据存储在磁盘中&#xff0c;而redis是储存在内存中。一般很多公司都是使用MySQLredis两种数据存储方式&#xff0c;这样可以提高性能&…

Linux删除特殊字符文件

1.删除带“-”的文件名的方法使用-- &#xff08;2个横杠&#xff09;#touch -- -%F-%T#rm -- -%F-%Trm: remove regular empty file -%F-%T?使用绝对路径并TAB特殊文件名#rm /root/-%F-%Trm: remove regular empty file /root/-%F-%T?2. 删除包含其它特殊字符的文件对于含有…

机器学习之线性回归 损失函数、代价函数、目标函数

损失函数&#xff08;Loss Function&#xff09;定义在单个样本上&#xff0c;算的是一个样本的误差。比如&#xff1a; 其中0-1损失函数: 感知器损失函数&#xff1a; 平方和损失函数&#xff1a; 绝对损失函数&#xff1a; 对数损失函数&#xff1a; 代价函数&#xff08;Cos…

bzoj4950(二分图最大匹配)

[Wf2017]Mission Improbable Time Limit: 1 Sec Memory Limit: 1024 MBSubmit: 105 Solved: 49[Submit][Status][Discuss]Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙。Patrick在编程竞赛上豪赌输掉了一大笔钱,所以他需…

git 远程仓库管理 分支创建、管理、查看、切换

作用&#xff1a; 区分生产环境代码以及开发环境代码研究新的功能或者攻关难题解决线上bug 特点&#xff1a; 项目开发中公用分支包括master、dev分支master是默认分支&#xff0c;用于发布&#xff0c;当需要发布时将dev分支合并到master分支分支dev是用于开发的分支&#…

大学生活应该这样度过之参加一个社团让自己溶入团队——《程序员羊皮卷》连载(11)

《程序员羊皮卷》当当购买地址&#xff1a;http://product.dangdang.com/product.aspx?product_id20691986 互动购买地址&#xff1a;http://www.china-pub.com/196049 1.3参加一个社团让自己溶入团队 有人曾经问我“学校里的什么活动和工作中的项目管理比较类似&#xff1f…

Hadoop Hive概念学习系列之hive的数据压缩(七)

Hive文件存储格式包括以下几类&#xff1a; 1、TEXTFILE 2、SEQUENCEFILE 3、RCFILE 4、ORCFILE 其中TEXTFILE为默认格式&#xff0c;建表时不指定默认为这个格式&#xff0c;导入数据时会直接把数据文件拷贝到hdfs上不进行处理。 SEQUENCEFILE&#xff0c;RCFILE&#xff0c;O…

java 加锁_Java并发之synchronized深入

一句话总结synchronized&#xff1a;JVM会自动通过使用monitor来加锁和解锁&#xff0c;保证了同时只有一个线程可以执行指定代码&#xff0c;从而保证了线程安全&#xff0c;同时具有可重入和不可中断的性质。一.synchronized的作用使用synchronized修饰方法或者代码块时&…

激活函数之 Sigmoid、tanh、ReLU、ReLU变形和Maxout

Sigmoid函数 Sigmoid函数计算公式 sigmoid&#xff1a;x取值范围(-∞&#xff0c;∞)&#xff0c;值域是(0, 1)。 sigmoid函数求导 这是sigmoid函数的一个重要性质。 图像 代码 # -*- coding: utf-8 -*- """ author: tom """import numpy im…