标签:自定义 分享图片 数据库 .sh 就是 ide unknown return void
一 . 概述
在前面我们的自定义Realm之中有一个问题,就是我们的密码是明文的,这个在实际的项目之中是不可能存在的.
在shiro之中,提供了加密的模块.我们可以使用各种加密的方式进行加密.
本节就介绍一下加密组件的使用.
二 . 加密组件
首先看一下shiro为我们提供的Hash加密类结构.
我们看到整个类的继承结构图,发现我们可以使用的类就是SimpleHash这个类.
我们使用一下这个类:
public static void main(String[] args) { SimpleHash hash = new SimpleHash("MD5","123","trek",2); System.out.println("加密之后为:"+hash.toString()); }
我们需要看一下结果,这个结果对我们的后面的密码校验器有关.
加密之后为:ab89651adb0399faf79a858a45c8b4ff
我们现在解释一个上面的参数信息:
(1)加密的算法
(2)加密字符串
(3)盐值
(4)加密次数
三 .密码匹配器
我们知道我们的密码信息在数据库之中保存的都是密文的.
现在我们使用一个密码匹配器完成这个操作.
realm=com.trek.shiro.base.CustomRealm mather=org.apache.shiro.authc.credential.HashedCredentialsMatcher mather.hashAlgorithmName=md5 mather.hashIterations=2 realm.credentialsMatcher=$mather securityManager.realm=$realm
我们配置了一个密码匹配器,其中设置了加密的算法和加密的次数.
然后我们修改一下我们的认证Realm.
//认证方法 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken info) throws AuthenticationException { //获取账号和密码 UsernamePasswordToken token = (UsernamePasswordToken) info; String username = token.getUsername(); String password = new String(token.getPassword()); //这里模拟一下认证 if(!"trek".equals(username)) { throw new UnknownAccountException("账号不存在!"); } if(!"123".equals(password)) { throw new IncorrectCredentialsException("密码不正确!!"); } //此处说明认证是成功的了. //现在要返回用户的身份信息了 SimpleAccount account = new SimpleAccount(username,"ab89651adb0399faf79a858a45c8b4ff",ByteSource.Util.bytes("trek"),getName()); return account; }
注意我们将我们从数据库之中查询出的密码放置在SimpleAccount对象之中,然后shiro就会帮助我们自动匹配密码的正确性.
四 .原理
shiro内置了一个密码匹配器,当我们通过Realm之中返回密码信息之后,shiro就会拿这个密码匹配器将之前我们的token之中的密码按照密码匹配器的方式进行
密码的获取,然后再进行比较.
因此,当我们配置了一个密码匹配器之后,我们就能完成密码的匹配操作了.
标签:自定义 分享图片 数据库 .sh 就是 ide unknown return void
原文地址:https://www.cnblogs.com/trekxu/p/9048803.html