一: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块来抛出异常.