01 简单的shrio认证

1 shrio简介

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

2 shrio架构

shrio架构图


12892840-d73551826d3f0289.png

shrio三个核心组件:Subject, SecurityManager 和 Realms.

Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。

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

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。

3 基于maven的简单测试

准备工作 pom.xml

<properties>

        <shiro.version>1.4.0</shiro.version>

        <junit.version>4.12</junit.version>

        <slf4j.version>1.7.2</slf4j.version>

    </properties>

      <dependencies>

          <dependency>

              <groupId>org.apache.shiro</groupId>

              <artifactId>shiro-core</artifactId>

              <version>${shiro.version}</version>

          </dependency>

          <dependency>

              <groupId>junit</groupId>

              <artifactId>junit</artifactId>

              <version>${junit.version}</version>

              <scope>test</scope>

          </dependency>

          <dependency>

                  <groupId>org.slf4j</groupId>

              <artifactId>slf4j-nop</artifactId>

                  <version>${slf4j.version}</version>

              </dependency>

      </dependencies>

3.1 创建简单的shrio类

package simplecount01;

import org.apache.shiro.SecurityUtils;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authc.UsernamePasswordToken;

import org.apache.shiro.mgt.DefaultSecurityManager;

import org.apache.shiro.realm.SimpleAccountRealm;

import org.apache.shiro.subject.Subject;

public class FirstShiro {

//1 创建简单本地realm对象

    SimpleAccountRealm  realm=new SimpleAccountRealm();

    public boolean validSimpleCount(){

//  2      设置本地realm的账号

        realm.addAccount("test","1234");

        //3 创建安全管理器核心对象

        DefaultSecurityManager manager=new DefaultSecurityManager();

//4 在安全管理的核心对象中添加realm对象

        manager.setRealm(realm);

//      5  通过工具类设置安全管理器

        SecurityUtils.setSecurityManager(manager);

//        6 通过工具类得到subject对象

        Subject subject = SecurityUtils.getSubject();

//        7 创建测试登录令牌对象

        AuthenticationToken token=new UsernamePasswordToken("test","12345");

//        8 测试令牌登录

        subject.login(token);

//        验证登录是否有效

        return subject.isAuthenticated();

    }

}

3.2 junit测试

package demo;

import org.junit.Assert;

import org.junit.Test;

import simplecount01.FirstShiro;

public class ShirtDemoTest {

FirstShiroone=new FirstShiro();

    @Test

    public void testSimpleCount(){

boolean b =one.validSimpleCount();

        Assert.assertEquals("is ok!",true,b);

    }

}

猜你喜欢

转载自blog.csdn.net/weixin_34194359/article/details/87032937
今日推荐