技术标签: exception 算法 Shiro apache shiro byte 加密
在进行身份认证时,用户的密码一般是用密文的形式存放在数据库中。这样在做比对时不能直接使用用户提交的明文口令。
在Shiro中使用org.apache.shiro.authc.credential.SimpleCredentialsMatcher做凭证信息的比对。SimpleCredentialsMatcher实现了
凭证信息的明文比对,即对凭证信息不做任何处理。
通过HashedCredentialsMatcher子类的扩展Shiro支持一些标准的加密算法,如MD5 和 SHA-1。
在使用时也可以根据自身需求定义自己的加密算法。下面是我实现的凭证信息比对类,加密算法是在网上找的DES算法。
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {
@Override
public boolean doCredentialsMatch(AuthenticationToken token,
AuthenticationInfo info) {
Object tokenCredentials = encrypt(toBytes(token.getCredentials()));
Object accountCredentials = getCredentials(info);
return equals(tokenCredentials, accountCredentials);
}
private byte[] encrypt(byte[] data) {
try {
byte[] key = "11111111".getBytes();
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(dks);
// using DES in ECB mode
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);
// 执行加密操作
byte encryptedData[] = cipher.doFinal(data);
return encryptedData;
} catch (Exception e) {
System.err.println("DES算法,加密数据出错!");
e.printStackTrace();
}
return null;
}
}
[main]
customMatcher = main.java.name.peter.shiro.realm.CustomCredentialsMatcher
jdbcRealm.credentialsMatcher = $customMatcher
转自:https://blog.csdn.net/qq_39479575/article/details/78534214curl -o /dev/null -s -w '%{time_connect}:%{time_starttransfer}:%{time_total}\n' 'http://kisspeach.com'0.081:0.272:0.77912下面给出对kisspea..._time_starttransfer
99代码实验结果解释优点所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。...
七天的学习、开发,虽然时间只是短短的七天,项目也是简简单单的,甚至可以说是简陋。但是真切的经历过,却恍若隔世。现在记录下来希望我,可以继续的坚持着努力,向着目标前行。项目启动准备统一环境因为我们是团队开发,所以需要统一大家的编程环境,防止出现各种工具版本不兼容的问题。JDK1.8.5eclipse4.6tomcat8.5HBuilder2.0.1SVN1.9axure8.0..._拍照识图功能代码
十大排序算法(Python实现)一. 算法介绍及相关概念解读算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。相关概念稳定:如果a原本在b前面,而a..._简单选择排序算法python_python实现十大经典排序算法
用C语言中的switch语句实现简易的四则运算计算器#includeint main(){ double number1=0.0; double number2=0.0; char operation=0; for(;;) { printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&n
1.elasticsearch-5.6.122.elastic search header3.fscrawler-es5-2.6安装和启动请看:https://blog.csdn.net/fulq1234/article/details/96485228文档:https://fscrawler.readthedocs.io/en/fscrawler-2.6/user/rest.ht..._fs crawler started for
解决办法:1、下载mysql-connector-java-8.0.x.jar,放到kettle的 data-integration\lib目录下,并重启kettle程序。2、对于 8.x 版本的 MySQL,jdbc 连接驱动方式有所变化,不能使用现有的 MySQL 连接配置方式,需要使用自定义 jdbc 连接方式**(kettle 创建数据库连接时类型选择Generic Database..._kettle access denied
今天同事遇到一个问题,UITableView走numberOfRowsInSection方法,却不走cellForRowAtIndexPath方法。问到我,我也一愣,想了想,好像遇到过。原因:UITableView的高度为 0 ;如果你的TableView的高度是根据内容的高度来自适应的话,当加载的数据为空时 reloadData 方法走完会将UITableView的高度设定为0。此时如果你有新的...
穿越派·派盘▹ 专属私有!个人电脑秒变云盘,云盘数据保存在个人电脑本地,安全防泄密。▹ 全平台远程访问,手机秒扩容,不限空间、不限网速。▹ 支持各种AAP中的WebDAV协议,支持数据同步备份。目前国内支持WebDAV的云盘为数不多,个人私有云盘也就只有穿越派·派盘了吧安装环境:[root@one ~]# cat /etc/redhat-releaseCentOS Linux release 8...._linux 可以播放webdav
用友nc65 uap开发查询模版中对于特定节点添加查询条件1.目标:对于H303113510节点加入限定条件,使得在调用查询模版后,sql语句加入固定条件。2.代码:package nc.ui.pub.fdcpr.query.action;import nc.ui.pr.H30301.LogonBO_Client;import nc.ui.pubapp.uif2app.que_nc65通过新增action
(1) 多线程文件下载的总体思路是:把一个下载任务分配给多个线程,首先获取文件的长度,平分给多个线程,每个线程负责指定的文件块,待全部线程完成后,再把各个线程下载的临时文件合并。
工作中遇到的问题记录_aws root登录