當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

密碼加密設置

1. 問題描述

在平台内置進行 用戶身份驗證 的時候,密碼存在數據庫(FineReport 内置數據庫 FineDB 或者其他外接數據庫)中,認證時用戶輸入的密碼與數據庫中密碼相同則認證通過。

若數據庫被破解了則對系統造成威脅,怎樣保證系統安全呢?

2. 解決方案

在進行 同步用戶 的時候,使用密碼加密功能。數據庫中存的是密文,輸入的密碼需要進行加密才能和數據庫中的密文進行匹配,加大破解難度,提高系統安全性。

3. 實現原理

3.1 設置方法

登錄平台,點擊「管理系統>用戶管理>同步用戶」的時候,設置加密方式,如下圖所示:

有兩種加密方式,「内置 SHA 加密」和「自定義密碼加密」。

圖片.png

3.2 内置 SHA 加密

适用場景:同步的服務器數據集中的密碼爲明文時,選擇内置 SHA 加密。

加密簡介:數據決策系統采用 SHA256 加密方式,以保證密碼安全。加密方式已經封裝了,用戶通過接口自定義修改密碼後,會自動進行 SHA256 加密。

登錄密碼:登錄密碼即爲同步的服務器數據集中的密碼,非 fine_user用戶表 中加密的密碼。

3.3 自定義密碼加密

适用場景:同步的服務器數據集中的密碼爲自定義加密後的密文,則必須使用自定義加密。

加密簡介:自定義密碼加密,即自定義一個密碼加密類。

                 加密方式在類中描述,并保存在%BI_Home%\webapps\webroot\WEB-INF\classes文件夾中。

                 數據決策系統會在用戶自定義加密算法的基礎上再進行 SHA256 二次加密,以保證密碼安全。

登錄密碼:登錄密碼爲同步的服務器數據集的密文解密之後的明文。

加密接口:用戶輸入的“密碼”或“用戶名和密碼”經過自定義加密規則進行加密,再和數據庫中的信息進行匹配,支持 2 個接口實現方法,如下:

1)只需要對密碼進行加密得到密文:String encode(String originText);//入參是明文密碼,對密碼進行加密得到密文

2)對用戶名和密碼進行加密得到密文:String encode(String originUserName, String originPassword);//入參是用戶名和明文密碼,返回結果是密文字符

注1:其中 String encode(String originUserName, String originPassword);加密方式爲 2019-01-18 新增的接口,包含接口1的功能,推薦使用此接口。

注2:自定義加密算法,必須繼承 AbstractPasswordValidator 類,并加上返回判斷明文密碼和密文密碼是否一緻結果方法才可行。

4. 自定義密碼加密示例

下面我們制作三個簡單的自定義密碼加密示例:實現自定義密碼 BASE64 加密、SHA256、MD5 加密。

4.1 BASE64 加密方式

4.1.1 自定義密碼驗證類

定義一個類,命名爲 Base64PasswordValidator.java,擴展於 AbstractPasswordValidator,詳細的代碼參見:

https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/decision/privilege/encrpt/Base64PasswordValidator.java

點擊下載并解壓 Base64PasswordValidator.class:Base64PasswordValidator.rar

将編譯的 Base64PasswordValidator.class 放在/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt目錄下。

注1:這裏使用 String encode(String originText);//只對密碼進行加密得到密文。

注2:需要重啓工程。

4.1.2 平台設置

在平台的用戶同步數據集>加密方式>自定義加密類中選擇 BASE64 加密類即可,如下圖所示:

注:本文僅進行簡單示例,您可以根據自己的需求自己定義加密的方式。

image.png

4.2 SHA256 加密方式

4.2.1 自定義密碼加密類

定義一個類,命名爲 CustomSHA256PasswordValidator.java,擴展於 AbstractPasswordValidator,詳細的代碼參見:

https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/decision/privilege/encrpt/CustomSHA256PasswordValidator.java

點擊下載并解壓 CustomSHA256PasswordValidator.class:CustomSHA256PasswordValidator.rar

将編譯的 CustomSHA256PasswordValidator.class 放在/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt目錄下。

注:這裏使用 String encode(String originUserName, String originPassword);//對用戶名和密碼一起進行加密得到密文。

4.2.2 平台設置

同 BASE64 加密方式,在平台的「同步用戶>加密方式>自定義加密類」中選擇 SHA256 加密類即可。

image.png

4.3 MD5 加密方式

9.0 及以前的版本,同步數據集中密碼可以選擇“内置 MD5 加密”,而在 FR10.0 中取消了默認的 MD5 加密。

若用戶的工程是 9.0 升級到 10.0 的,而在升級之前用戶同步采用的是默認内置 MD5 加密或者用戶就想使用 MD5 加密方式,又該如何處理呢?

4.3.1 下載 MD5 加密類

現提供現成的 MD5 加密類 :decision-new-password.zip

點擊下載并解壓之後,将類放於%FR_HOME%\webroot\WEB-INF\classes\com\fr\decision目錄下。

4.3.2 平台設置

平台的「同步用戶>加密方式>自定義加密類」中選擇 MD5 加密類即可,如下圖所示:

image.png

4.3.3 支持用戶名加密

若用戶需要的是【用戶名+密碼】的方式進行自定義加密,請使用文件:decision.zip,使用方法同上。

4.3.4 注意事項

9.0 版本 FineReport 内置的 MD5 加密方式不區分密文大小寫,10.0 版本 FineReport适配的 MD5 加密方式區分大小寫。
9.0 同步選擇内置 MD5 加密,升級後會内置一個小寫 MD5 的 class,如果是大寫密文,升級後就不能登錄,需要手動替換大寫 class,使用方法同上。

class 文件點擊下載:MD5UpperCasePasswordValidator.rar

附件列表


主題: 原簡體文檔
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

9s后關閉

反饋已提交

網絡繁忙