Shiro实战(一) Shiro核心概念

一、Shiro是什么java

Shiro是功能强大、简单易用的Java安全框架,核心功能包括:认证、受权、加密以及Session管理。Shiro的应用范围很普遍,小型移动端应用、大型Web应用以及企业级应用都可以胜任。git

二、Shiro的核心概念github

Subject 主题安全

刚开始看到这个词时确实有点摸不着头脑,可是咱们能够将其简单理解为‘the current user',当前正在执行操做的用户,这样就好理解多啦!   
那怎么样才能获取Subject呢?这个Subject又可以作什么呢?下面咱们经过一段代码来了解下bash

// 获取Subject
Subject currentUser = SecurityUtils.getSubject();

SecurityManager架构

SecurityManager是Shiro架构的核心,也是前面咱们介绍的Subject的幕后英雄,经过对象的名称咱们也能大致猜到SecurtiyManager的做用,那就是管理应用中的全部用户的安全操做。 框架

通常来讲,一个应用只会存在一个SecurityManager实例,也就是属于应用层面的Sigleton。那么咱们如何获取到SecurityManager对象呢?下面经过简单的Java应用来介绍如何获取SecurityManagermaven

首先,咱们建立一个maven项目quick-start,在resources目录下新建一个INI配置文件(为何是INI配置文件,不是XML或者properties文件呢?Shiro默认是基于INI配置文件的,并且Shiro团队认为INI配置文件相比较XML更宜读,使用起来更简单,须要的依赖也更少),而后建立一个QuickStart.java
INI配置文件内容以下:ui

#用户名以及该用户对应的密码以及角色
#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

相关文章
相关标签/搜索