wxiao个人技术分享 wxiao的技术分享

Shiro示例 + 加密

⚠️ 本文最后更新于2024年09月09日,已经过了261天没有更新,若内容或图片失效,请留言反馈

简单的测试实例

1.导入依赖

<!-- shiro -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.4.1</version>
</dependency>

2.在resources下创建shiro.ini文件

[users]
// 用户=密码,角色
zhangsan=123456,seller
lisi=123123,ckmgr
admin=admin,admin

[roles]
// 角色=权限
admin=*
seller=order-add,order-del,order-list
ckmgr=ck-add,ck-del,ck-list

3.测试案例

public class ShiroDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入账号:");
        String username = sc.next();
        System.out.println("请输入密码:");
        String password = sc.next();

        //1.创建安全管理器
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
        //2.创建realm
        IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
        //3.将realm设置给安全管理器
        securityManager.setRealm(iniRealm);
        //4.将Realm设置给SecurityUtil工具
        SecurityUtils.setSecurityManager(securityManager);
        //5.通过SecurityUtil工具类获取subject对象
        Subject subject=SecurityUtils.getSubject();

        //认证流程
        //将认证账号和密码封装到token中
        UsernamePasswordToken token=new UsernamePasswordToken(username,password);
        //通过subject对象调用login方法进行认证
        boolean flag=false;
        try{
            subject.login(token);
            flag=true;
        }catch (IncorrectCredentialsException e){
            flag=false;
        }
        System.out.println(flag?"登录成功":"登录失败");

        //授权
        //判断是否有某个角色
        System.out.println(subject.hasRole("seller"));

        //判断是否有某个权限
        System.out.println(subject.isPermitted("order-del"));
    }
}

加密

public class ShiroDemo2 {
    public static void main(String[] args) {
        // 初始密码
        String password = "123456";
        // 生成盐值
        String salt = new SecureRandomNumberGenerator().nextBytes().toString();
        // 表示加密操作的循环次数 多次迭代可以增加密码的复杂度
        int times = 2;  // 加密次数:2
        // 更安全的算法:如 SHA-256 或 bcrypt。
        String alogrithmName = "md5";   // 加密算法
        // 对原始密码进行加密
        String encodePassword = new SimpleHash(alogrithmName, password, salt, times).toString();
        // 输出
        System.out.printf("原始密码是 %s , 盐是: %s, 运算次数是: %d, 运算出来的密文是:%s ",password,salt,times,encodePassword);
    }
}
By xiao On