excel报表工具FineReport简单权限之密码加密

 时间:2024-10-12 01:21:36

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

工具/原料

excel报表工具FineReport

1.解决方案

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

2.实现原理

1、1设置方法登录平台,点击>管理系统>用户管理>导入添加用户的时候,设置加密方式,如下图:

excel报表工具FineReport简单权限之密码加密

2、2密码加密方式分类密码加密功能分为不设置密码加密、自定义密码加密和内置MD5加密。不设置密码加密和内置MD5加密:这两种加密方式已经封装了,直接勾选即可,其中MD5加密只支持32位;自定义密码加密:需要将自定义的密码验证类(包含了加密方法)放在报表服务如/WebReport/WEB-INF/classes下,勾选自定义密码加密,并指向自定义的密码验证类。具体可参考下方的自定义密码加密示例。

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

4、·不设置密码加密:用户输入的密码与数据库中的密码一致,密码验证方法返回:return localP锾攒揉敫assword.equals(clientPassword);·内置MD5加密:用户输入的密码经过32位MD5加密,再和数据库中的密码进行匹配,密码验证方法返回:return localPassword.equals(MD5(clientPassword));·自定义密码加密:用户输入的密码经过自定义加密规则进行加密,再和数据库中的密码进行匹配,密码验证方法返回:return localPassword.equals(div(clientPassword));

5、自定义密码加密中,用户输入密码后提交,报表服务器会调用shouldIgnoreUser艘绒庳焰name()方法判断调用encodePassword(clientPassword)和encodePassword(String clientPassword, String clientUsername)中的哪一个密码验证方法,如果shouldIgnoreUsername()返回true(默认返回true),则调用encodePassword(clientPassword)方法,忽略用户名,如果返回false,则调用encodePassword(String clientPassword, String clientUsername),将用户名加入到密码加密中,然后再根据密码验证方法来判断数据库中密码和用户输入的匹配情况,相同返回true,否则返回false。

6、·注:验证方法encodePassword中clientPassword为用户输入的密码,clientUsername为用户输入的用户名。·另:7.1版本之前使用的方法为validatePassword,实现向下兼容。

3.自定义密码加密示例

1、1自定义密码验证类·自定义密码验证类之忽略用户名定义一个类,命名为TestPasswordValidator.java,扩展于AbstractPasswordEncode,重写其中带有2个参数的密码验证方法encodePassword,具体代码如下:

2、packagecom.fr.pri箪滹埘麽vilege;importcom.fr.general.ComparatorUtils;importcom.熠硒勘唏fr.privilege.providers.dao.AbstractPasswordEncode;publicclassTestPasswordValidatorextendsAbstractPasswordEncode{@OverridepublicStringencodePassword(StringclientPassword){return(clientPassword+"FR");//即获取用户输入的密码然后在后面加上FR,再与数据库密码匹配。}}

3、·注:由于shouldIgnoreUsername()方法默认返回true,即直接调用忽略用户名的encodePassword(String clinetPassword)方法,故可以无需将shouldIgnoreUsername()方法写进来。

4、将编译的TestPasswordValidator.class放在/WebReport/WEB-INF/classes/com/fr/privilege目录下。

5、·自定义密码验证类之不忽略用户名定义一个类,命名为TestPasswordValidatorUser.java,扩展于AbstractPasswordEncode,使shouldIgnoreUsername()方法返回false,并重写其中带有2个参数的密码验证方法encodePassword,具体代码如下:

6、packagecom.fr.pri箪滹埘麽vilege;importcom.fr.general.ComparatorUtils;importcom.熠硒勘唏fr.privilege.providers.dao.AbstractPasswordEncode;publicclassTestPasswordValidatorUserextendsAbstractPasswordEncode{/***三个参数的密码加密算法:满足数据库密码=FR+用户名+密码+RF,返回true*@paramlocalPassword存储在数据库中的密码*@paramclientPassword用户输入的密码*@paramclientUsername用户名*@return是否验证成功*/publicStringencodePassword(StringclientPassword,StringclientUsername){return"FR"+clientUsername+clientPassword+"RF";}/***验证密码时是否要忽略用户名*/publicbooleanshouldIgnoreUsername(){returnfalse;}@OverridepublicStringencodePassword(Stringarg0){//TODOAuto-generatedmethodstubreturnnull;}/***2个参数的密码验证方法,直接returnfalse*/}

7、将编译的TestPasswordValidatorUser.class放在/WebReport/WEB-INF/classes/com/fr/privilege目录下。

8、2平台设置勾选自定义密码加密,在文本框中输入com.fr.privilege.providers.TestPasswordValidator,如下图所示:

excel报表工具FineReport简单权限之密码加密

9、设置后,数据库密码如123FR,用户输入123时可以登录成功。如果在自定义密码加密的文本框中输入的是TestPasswordValidatorUser类,数据库密码如FRaaa123RF,那么用户输入aaa,密码输入123即可登录成功。

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

  • excel报表工具FineReport之权限细粒度控制
  • excel报表工具FineReport权限细粒度之工具栏
  • excel报表工具FineReport之权限细粒度之参数
  • excel报表工具FineReport之滚动条问题
  • excel报表工具FineReport之嵌套模板并设置联动
  • 热门搜索
    关于科技节的手抄报 三爱三节手抄报图片 法制手抄报的内容 关于弟子规的手抄报 庆五一手抄报 诚信教育手抄报 生活中的小数手抄报 环境手抄报内容 关于国庆节的英语手抄报 童话手抄报内容