简单权限之密码加密

编辑
  • 文档创建者:文档助手1
  • 浏览次数:13232次
  • 编辑次数:41次
  • 最近更新:Kevin-s 于 2019-06-08
  • 1. 问题描述

    在平台内置进行 用户身份验证 的时候,密码存在数据库(FineReport 内置数据库 FineDB 或者其他数据库)中,认证时用户输入的密码与数据库中密码相同则认证通过,若数据库被破解了则对系统造成威胁,怎样保证系统安全呢?

    2. 解决方案

    在进行 手动添加用户 的时候,使用密码加密功能。数据库中存的是密文,输入的密码需要进行加密才能和数据库中的密文进行匹配,加大破解难度,提高系统安全性。

    3. 实现原理

    3.1 设置方法

    登录平台,点击管理系统>用户管理>设置开启同步数据集的时候,设置加密方式,如下图:



    3.2 密码加密方式分类

    密码加密功能分为:内置 SHA 加密、自定义密码加密。

    • 内置 SHA 加密:加密方式已经封装了;

    • 自定义密码加密:需要将自定义的密码验证类(包含了加密方法)放在报表服务器如/webapps/webroot/WEB-INF/classes下,勾选自定义密码加密,并指向自定义的密码验证类。

    3.3 原理

    若设置了加密规则,encodePassword 方法中会先对用户输入密码进行加密转换,再与数据库密码匹配。

    • 内置 SHA 加密用户输入的密码默认经过SHA加密,再和数据库中的密码进行匹配;

    • 自定义密码加密:用户输入的“密码”或“用户名和密码”经过自定义加密规则进行加密,再和数据库中的信息进行匹配,支持 2 个接口实现方法,如下:

    1)只需要对密码进行加密得到密文:String encode(String originText);//入参是明文密码,对密码进行加密得到密文

    2)对用户名和密码进行加密得到密文:String encode(String originUserName, String originPassword);//入参是用户名和明文密码,返回结果是密文字符

    注:其中 String encode(String originUserName, String originPassword);加密方式为 2019.1.18 新增的接口,包含接口1的功能,推荐使用此接口。

    4. 自定义密码加密示例

    下面我们制作三个简单的自定义密码加密示例:实现自定义密码 BASE64 加密、SHA256、MD5 加密。

    4.1 BASE64 加密方式

    1)自定义密码验证类

    定义一个类,命名为 Base64PasswordValidator.java,扩展于 AbstractPasswordValidator,详细的代码参见:

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

    编译获得 Base64PasswordValidator.class,将编译的 Base64PasswordValidator.class 放在/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt目录下。

    注:这里使用 String encode(String originText);//只对密码进行加密得到密文。

    注:需要重启工程。

    2)平台设置

    在平台的用户同步数据集>加密方式>自定义加密类中选择 BASE64 加密类即可,如下图:



    注:这边是举了一个最简单的例子,您可以根据自己的需求自己定义加密的方式。

    4.2 SHA256 加密方式

    1)自定义密码加密类

    定义一个类,命名为 CustomSHA256PasswordValidator.java,扩展于 AbstractPasswordValidator,详细的代码参见:

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

    同上,编译获得 CustomSHA256PasswordValidator.class

    将编译的CustomSHA256PasswordValidator.class放在/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt目录下。

    注:这里使用 String encode(String originUserName, String originPassword);//对用户名和密码一起进行加密得到密文。

    2)平台设置

    同 BASE64 加密方式,在平台的用户同步数据集>加密方式>自定义加密类中选择 SHA256 加密类即可。


    4.3 MD5 加密方式


    9.0 及以前的版本,同步数据集中密码可以选择“内置 MD5 加密”,而在 FR10.0 中取消了默认的 MD5 加密。

    若用户的工程是 9.0 升级到 10.0 的,而在升级之前用户同步采用的是默认内置 MD5 加密或者用户就想使用 MD5 加密方式,又该如何处理呢?

    1)下载 MD5 加密类

    现提供现成的 MD5 加密类,点击下载之后,将类放于%FR_HOME%\webroot\WEB-INF\classes\com\fr\decision目录下

    2)平台设置

    在平台的用户同步数据集>加密方式>自定义加密中选择 MD5 加密类即可,如下图:


    3)支持用户名加密

    若用户需要的是【用户名+密码】的方式进行自定义加密,请使用文件:decision.zip,使用方法同上。



    附件列表


    主题: 部署集成
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]