Shiro 简介 ①

1.什么是shiro?

shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。
   spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。
   shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,
   分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。

2.shiro流程图


 Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject 都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager 交互;且它管理着所有Subject;可以看出它是Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

3.简单使用

导入依赖

  <!-- shiro核心包 -->
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>${shiro.version}</version>
    </dependency>
    <!-- 添加shiro web支持 -->
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-web</artifactId>
      <version>${shiro.version}</version>
    </dependency>

demo使用的是固定数据 (这是我的ini文件,模拟用户登录)

[users]
zs=123
ls=456
ww=789

具体代码:

 public static void main(String[] args) {
        //对配置文件(shiro.ini)读取进行读取,获取securitymanager工厂
        IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");

        //通过工厂获取securityManager
        SecurityManager securityManager = securityManagerFactory.getInstance();

        //securityManager交给securityUtil进行管理
        SecurityUtils.setSecurityManager(securityManager);

        //通过securityUtil获取登入系统的主体(用户,网络爬虫)
        Subject subject = SecurityUtils.getSubject();

        //需要通过用户密码得到令牌
        UsernamePasswordToken token = new UsernamePasswordToken("zs", "123");

        //主体(用户)手持令牌进行登录
        try {
            subject.login(token);
            System.out.println("登录成功");
        } catch (Exception e) {
            System.out.println("登录失败");

        }
        subject.logout();


    }

猜你喜欢

转载自blog.csdn.net/qq_40979551/article/details/85401555