Shiro---认证方法定义模板【仅供参考】

登陆流程:
在这里插入图片描述

使用Shiro进行安全管理,首先先要自定义一个Realm类来继承AuthorizingRealm,并实现其两个方法,分别是doGetAuthorizationInfo、doGetAuthenticationInfo,前者是自定义授权操作方法,后者是自定义认证方法。

**
 * 使用salt和md5对密码进行加密
 */
public class CustomerRealm2 extends AuthorizingRealm {

    /**
     * 授权方法
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    /**
     * 认真方法
     * @param token
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        String principal = (String) token.getPrincipal();
        if ("sdl".equals(principal)){
            //使用MD5+salt进行密码加密,并且进行1024次散列,提高安全性
            return new SimpleAuthenticationInfo(principal,"21ababebd65267d72d6b32e2e8392793", ByteSource.Util.bytes("0dex"),this.getName());

        }
        return null;
    }
}

使用自定义realm方法进行身份认证

/**
 * 测试随机盐和md5算法
 */
public class TestDiyRealm2 {
    public static void main(String[] args) {
        //创建安全管理器
        DefaultSecurityManager defaultSecurityManage=new DefaultSecurityManager();
        //设置自定义的realm
        CustomerRealm2 customerRealm2 = new CustomerRealm2();
        //设置md5加密
        HashedCredentialsMatcher hashedCredentialsMatcher=new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName("MD5");
        //设置散列次数
        hashedCredentialsMatcher.setHashIterations(1024);
        //给customerRealm2设置密码匹配器
        customerRealm2.setCredentialsMatcher(hashedCredentialsMatcher);
        defaultSecurityManage.setRealm(customerRealm2);
        //给全局安全工具类设置安全管理器
        SecurityUtils.setSecurityManager(defaultSecurityManage);
        //获取主体
        Subject subject = SecurityUtils.getSubject();
        /*Md5Hash hash=new Md5Hash("123","0dex",1024);
        System.out.println(hash.toHex());*/
        //创建令牌
        UsernamePasswordToken token=new UsernamePasswordToken("sdl","123");
        try{
            subject.login(token);
            System.out.println("登陆成功");
        }catch (UnknownAccountException e){
            System.out.println("未知账户");
        }catch (IncorrectCredentialsException e){
            System.out.println("密码错误");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空圆小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值