Shiro简介及简单入门demo

目录树

Shiro

安全框架:简单说对访问权限进行控制,安全性包括用户认证用户授权
用户认证一般要求用户提供用户名和密码,系统通过校验两者来完成认证。
用户授权指验证某个用户是否有权限执行某个操作。
一般来说,系统会为不同的用户分配不同的角色,而每个角色对应一系列权限。

1.什么是Shiro

Shiro是apache的一个开源框架,将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权,加密,会话管理等,组成一个通用的安全认证框架。
在这里插入图片描述

1.1 Shiro模块内容具体意义

  • Subject

即“当前操作用户”,不仅指“人”,也可以是“第三方进程”、“后台账户”。仅仅意味“当前跟软件交互的东西”。

Subject代表当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

  • SecurityManager

shiro框架的核心,shiro通过SecurityManager来管理内部组件实例,并通过它提供安全管理的各种服务。

  • Realm

Realm是Shiro与应用安全数据 间的“桥梁”或者“连接器”。
在这里插入图片描述

1.2 Shiro中的认证

1.2.1 认证
身份认证,就是判断一个用户是否为合法用户的处理过程。
1.2.2 shiro中认证的关键对象

  • Subject 主体
    访问系统的用户,主体可以是用户、进程等,即进行认证的都称为主体。
  • Principal 身份信息
    是主体Subject进行身份认证的标识,标识具有唯一性,如用户名、手机号、邮箱等。一个主体可以有多个身份,但必须有一个主身份。
    credential:凭证信息
    是主体自己知道的安全信息,如:密码、证书等。

1.3 认证流程图

在这里插入图片描述

2.Shiro入门demo

先创建一个maven项目。
在这里插入图片描述

大体4步
1.加入shiro的jar包
2.加入扫描路径—自定义的ini文件,因为这个demo不连接数据库
3.创建ini虚拟数据库文件
4.编写测试类shiroTest.java

2.1 导shiro的jar包

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

    <!--必須要,不然日志文件報錯-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>

2.2 扫描路径

这是为了让idea知道模拟数据库文件的路径在哪里,因为项目不连接数据库

	<!--等下的ini文件直接放resources,这是指明路径-->
    <resources>
      <resource>
        <directory>/src/main/resources</directory>
      </resource>
    </resources>

2.3 创建ini文件

在这里插入图片描述
在这里插入图片描述
这个文件编码格式为:UTF-8、ANSI。

2.4 测试类shiroTest

public class TestShiro {
    public static void main(String[] args) {
        System.out.println("shiro简单入门测试------");

        //1.创建安全管理器对象
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        //2.给安全管理器对象设置realm(引入安全数据的文件)
        //就是把自己定义好的realm文件加进来,用来验证规则,就加入到我们的安全管理器中
        defaultSecurityManager.setRealm(new IniRealm("classpath:shiro.ini"));
        //3.安全工具设置安全管理器
        //即把安全管理器加入到安全工具中去
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        //4.通过安全工具获取用户主体   主体可以使scanner传入的,也可以页面传入的
        Subject subject = SecurityUtils.getSubject();

        //------------------以上相当于我们的后端验证

        //把配置文件上的用户信息获取出来放入令牌中
        //5.这个就是我们的令牌(里面带着我们的信息)   即相当于前端传过来的信息
        UsernamePasswordToken token = new UsernamePasswordToken("yty","123123");

        //目前安全管理器里的信息和第5步中的令牌的信息 没有 联系在一起
        System.out.println("没有认证之前。。。。。。。");
        System.out.println(subject.isAuthenticated());//判断subject有没有认证

        //只需要一个subject.login(token);即可联系起来
        //开始认证
        System.out.println("进行认证-----------");
        subject.login(token);
        System.out.println(subject.isAuthenticated());

    }
}

结果:
在这里插入图片描述
如果传过来的密码和ini文件密码不一致就会报错。
在这里插入图片描述
密码不一致,报错!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值