shiro授权入门案例------用ini充当数据库作用

IDEA创建的maven的java项目


步骤一:在pom.xml文件中添加依赖

  <dependencies>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-all</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    

步骤二:在resources文件夹下定义ini文件,充当数据库的角色。该ini文件命名为shiro-per.ini

#权限测试
[users]
#用户zhang的密码是123,此用户具有role1和role2两个角色
zhangsan=123,role1,role2
lisi=123,role2

[roles]
#角色role1对资源user拥有create、update权限
role1=user:create,user:update
#角色role2对资源user拥有create、delete权限
role2=user:create,user:delete
#角色role3对资源user拥有create权限
role3=user:create



步骤三:在java文件夹下创建测试类测试是否包含权限和角色

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

import java.util.ArrayList;
import java.util.List;

public class TestDemo1 {
    public static void main(String[] args) {
        //创建安全管理对象
        Factory<SecurityManager> factory=
                new IniSecurityManagerFactory("classpath:shiro-per.ini");//注意着个泛型导的包,由于自动导的是java.lang包,所以手动导的。classpath:这是固定的,不能少了。
        //创建具体对象
        SecurityManager instance=(SecurityManager) factory.getInstance();
        //添加安全管理器对象导工具类中
        SecurityUtils.setSecurityManager(instance);
        //创建主体信息
        Subject subject=SecurityUtils.getSubject();
        //创建UsernamePasswordToken 对象保存用户登录时的用户名和密码。--------------灵活步骤
        UsernamePasswordToken token=
                new UsernamePasswordToken("zhangsan","123");//用户登录后我们将其存在UsernamePasswordToken中,用于subject.isAuthenticated()判断存的这个是否和shiro.ini文件中的一致。
        //认证
        subject.login(token);  //提交认证,并将用户名和密码存在subject中。利用login方法将用户写的用户名和密码提交到Realm的认证部分进行认证,下面的isAuthenticated()方法则是认证后返回的结果,该返回结果只有true和false

        //测试认证结果(subject.isAuthenticated()用于判断主体信息即用户名和密码是否正确)
        /*此行代码是比对效果*/  boolean b = subject.isAuthenticated();//isAuthenticated用于比对UsernamePasswordToken 中存的是否存在于shiro-per.ini中,若在则返回true。不存在shiro-per.ini中则返回false
        System.out.println("认证结果一:"+b);
        //判断授权


         //只有一个角色或权限时
        //本次例子中的重点代码,就这两行
        boolean permitted = subject.isPermitted("user:create");//isPermitted()是判断权限的,即[roles]下的value。本段代码意思是判断zhangsan这个用户对应的角色中是否有user:create这个权限。有一个角色有即可返回true
        System.out.println("permitted:"+permitted);
        boolean role1 = subject.hasRole("role1");//hasRole()是判断角色的,即[users]的value。本段代码意思是判断zhangsan是否是role1这个角色
        System.out.println("role1:"+role1);


        //当有多个角色或权限时
        boolean[] permitted1 = subject.isPermitted("user:create", "user:select");//zhanssan是否有这当中的权限?
        System.out.println("permitted1:"+permitted1);
        List list=new ArrayList();
        list.add("role1");
        list.add("role3");
        boolean[] booleans = subject.hasRoles(list);//判断是否是集合中这些角色
        System.out.println("bolleans:"+booleans);

        //退出
        subject.logout();
        boolean b2=subject.isAuthenticated();
        System.out.println("认证结果2:"+b2);
    }

}

本案例项目的结构:
在这里插入图片描述
本项目的运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值