简单权限之密码加密

编辑
  • 文档创建者:文档助手1
  • 浏览次数:16081次
  • 编辑次数:45次
  • 最近更新:Carly 于 2019-09-11
  • 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 加密方式

    4.1.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);//只对密码进行加密得到密文。

    注:需要重启工程。

    4.1.2 平台设置

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


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

    4.2 SHA256 加密方式

    4.2.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);//对用户名和密码一起进行加密得到密文。

    4.2.2 平台设置

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

    4.3 MD5 加密方式

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

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

    4.3.1 下载 MD5 加密类

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

    4.3.2 平台设置

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


    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

    附件列表


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

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

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