shiro_03

shiro的简单测试

  1. 导入jia包
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-core</artifactId>
  <version>1.2.3</version>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.6.1</version>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.6.1</version>
</dependency>
  1. 创建shiro.ini配置文件,模拟数据库用户列表
    在这里插入图片描述
  2. 简单应用
 //1:创建SecurityManager工厂对象 加载配置文件,创建工厂对象
    Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro");
    //2:通过工厂对象,创建SecurityManager对象
    SecurityManager securityManager = factory.getInstance();
    //3:将securityManager绑定到当前运行环境中,让系统随时随地都可以访问securityManager对象
    SecurityUtils.setSecurityManager(securityManager);
    //4:创建当前登陆的主体
    Subject subject = SecurityUtils.getSubject();


    
    //5:收集主体登陆的主体,注意:此时主体没有通过验证
    UsernamePasswordToken token = new UsernamePasswordToken( "test","22");

    //6:主体登陆

    try {
        subject.login(token);
        if(subject.isAuthenticated()){
            System.out.println("登录成功");
            //hasRole:判断是否拥有这个角色
            if(subject.hasRole( "admin")){
                System.out.println("有admin角色");
            }else{
                System.out.println("没有admin角色");
            }
            //isPermitted:判断是否拥有这个权限
            if(subject.isPermittedAll( "and","search")){
                System.out.println("有search,search这个权限");
            }else {
                System.out.println("没有search,search这个权限");
            }
        }
    } catch (AuthenticationException e) {
        e.printStackTrace();
        System.out.println("用户名或密码错误,登录失败");
    }

    //7:判断登录是否成功
    System.out.println("验证登陆是否成功:"+subject.isAuthenticated());

    //8:登出(注销)
    subject.logout();
    System.out.println("验证登陆是否成功:"+subject.isAuthenticated());

常见方法

isAuthenticated:判断是否登录(true登录/false注销)
hasRole:判断是否拥有这个角色
isPermittedAll:判断是否拥有这个权限
login:登录
logout:注销

认证操作常见的异常

密码错误在这里插入图片描述
找不到账户在这里插入图片描述

操作流程分析

在这里插入图片描述
在这里插入图片描述
1,调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;
2,securityManager通过Authenticator(认证器)进行认证;
3,Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是iniRealm(shiro自带,相当于数据源);
4,IniRealm先根据token中的账号去ini中找该账号,如果找不到则给Modular RealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
5,最后调用Subject.logout进行退出操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值