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.pswp.cn/news/454298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454298.shtml
英文地址,請注明出處:http://en.pswp.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…