Shiro安全框架--基础认证

一:Shiro介绍

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。


三个核心组件:Subject, SecurityManager Realms.
      1.Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。
  Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
  2.SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
  3.Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

二:Shiro认证

Shiro认证我这里整理了三个例子(基础认证,自定义认证,整合在ssm里的认证,后俩个下篇可以看到)

为了让我们熟悉一下shiro的认证效果,先举一个基础认证的例子

1.Shiro的download并不是下载jar包 它是提供了在maven环境下引入Shiro的依赖,先引入基本的依赖

<!--导入shiro-web的依赖 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <!-- 导入shiro-core的依赖 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <!-- 导入shiro-spring 的依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>${shiro.version}</version>
        </dependency>

2.写shiro的ini配置文件

#配置用户
[users]
admin=123456

3.写一个测试类

/**
     * shiro的基础认证
     */
    @Test
    public void test1() throws  Exception{
        //读取配置文件 就会新建一个SecurityManager工厂对象 配置信息就会放到对象里面取 注意包
        Factory<SecurityManager> factory=  new IniSecurityManagerFactory("classpath:shiro.ini");
        //获取SecurityManager对象
        SecurityManager securityManager=factory.getInstance();
        //将securityManager设置在当前的环境中
        SecurityUtils.setSecurityManager(securityManager);
        //获取当前操作对象
        Subject subject=SecurityUtils.getSubject();
        //实例化令牌
        UsernamePasswordToken usernamePasswordToken=new UsernamePasswordToken("admin","123456");
        //登录 需要一个令牌对象
        subject.login(usernamePasswordToken);
        //输出看认证是否通过
        System.out.println(subject.isAuthenticated());

    }

输出结果为true,则证明成功,为false失败则会报错 ,这里需要引入catch块来抛出异常.

  

猜你喜欢

转载自blog.csdn.net/qqqnzhky/article/details/84347681