1、Shiro是什么
Shiro是功能强大、简单易用的Java安全框架,核心功能包括:认证、授权、加密以及Session管理。Shiro的应用范围很广泛,小型移动端应用、大型Web应用以及企业级应用都能够胜任。
2、Shiro的核心概念
Subject 主题
刚开始看到这个词时确实有点摸不着头脑,但是我们可以将其简单理解为‘the current user',当前正在执行操作的用户,这样就好理解多啦!
那怎么样才能获取Subject呢?这个Subject又能够做什么呢?下面我们通过一段代码来了解下
// 获取Subject
Subject currentUser = SecurityUtils.getSubject();
SecurityManager
SecurityManager是Shiro架构的核心,也是前面我们介绍的Subject的幕后英雄,通过对象的名称我们也能大体猜到SecurtiyManager的作用,那就是管理应用中的所有用户的安全操作。
一般来说,一个应用只会存在一个SecurityManager实例,也就是属于应用层面的Sigleton。那么我们如何获取到SecurityManager对象呢?下面通过简单的Java应用来介绍如何获取SecurityManager
首先,我们创建一个maven项目quick-start,在resources目录下新建一个INI配置文件(为什么是INI配置文件,不是XML或者properties文件呢?Shiro默认是基于INI配置文件的,而且Shiro团队认为INI配置文件相比较XML更宜读,使用起来更简单,需要的依赖也更少),然后创建一个QuickStart.java
INI配置文件内容如下:
#用户名以及该用户对应的密码以及角色
#username = password, role1, role2..., roleN
[users]
rivers = secret, admin
calabash = warrior, guest
#角色以及该角色可以拥有的权限
#rolename = permission1, permission2..., permissionN
[roles]
admin = UserManagerment:*
guest = UserManagerment:getUserInfo
QuickStart部分代码如下:
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager manager = factory.getInstance();
SecurityUtils.setSecurityManager(manager);
通过上面代码我们看到,首先加载INI配置文件,然后利用工厂模式得到SecurityManager对象。
Realms
Realm的主要作用就是用来执行认证和授权的逻辑,它其实就相当于Shiro与安全数据(用户账号密码角色权限)之间进行交互的桥梁。当配置Shiro时,我们必须配置至少一个Realm来进行认证和授权,当然你也可以配置多个,这也就是为什么我们这个小节的标题是Realms,而不是Realm的原因。
但是在上面的示例代码中,我们并没有配置Realm呀!只是在INI配置文件中,配置了部分用户以及该用户对应的角色和权限信息,那应用岂不是会存在问题?Debug发现,我们上面代码拿到的SecurityManager对象其实已经存在Realm对象,内容正好是我们INI配置文件中的内容。
通过上面的图片我们可以看到,Shiro默认给我们的SecurityManager其实是DefaultSecurityManager,由于我们在INI配置文件中配置了[users]与[roles],Shiro在初始化SecurityManager时自动初始IniRealm对象,并将配置中的[users]与[roles]的值加载进IniRealm对象中。
至此,Shiro的三个核心概念已经介绍完毕。代码示例下载地址shiro-study
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。