Shiro Review——Shiro介绍

一,Shiro整体介绍          

 

shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。

 

spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。

shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。

 

使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本。

shiro架构:

subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。

securityManager:安全管理器,主体进行认证和授权都是通过securityManager进行。

authenticator:认证器,主体进行认证最终通过authenticator进行的。

authorizer:授权器,主体进行授权最终通过authorizer进行的。

sessionManager:web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。

SessionDao:  通过SessionDao管理session数据,针对个性化的session数据存储需要使用sessionDao。

cache Manager:缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。

realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据。

cryptography:密码管理,提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。

二,认证流程

测试工程:

如果构造maven 工程,可使用如下依赖:

<dependencies>
		<!-- http://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>1.2.5</version>
		</dependency>
		<!-- http://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.21</version>
		</dependency>

	</dependencies>

shiro的ini配置:

#对用户信息进行配置
[users]
#用户名跟密码
zhangsan=111111
lisi=111111

测试代码:

/**
 * 认证测试
 *
 * @author LiuHuiChao
 *
 */
public class AuthenticationTest {
	// 用户登录和退出
	@Test
	public void testLoginAndLogout() {
		// 读取配置文件,初始化SecurityManager工厂
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(
				"classpath:shiro-first.ini");
		//创建SecurityManager
		SecurityManager securityManager=factory.getInstance();

		//将SecurityManager设置到当前的运行环境中
		SecurityUtils.setSecurityManager(securityManager);

		//从SecurityUtils构造创建一个subject
		Subject subject=SecurityUtils.getSubject();

		//在提交认证前,需要准备token
		UsernamePasswordToken token=new UsernamePasswordToken("zhangsan","111111");

		//执行认证提交
		try {
			subject.login(token);
		} catch (AuthenticationException e) {
			e.printStackTrace();
		}

		boolean IsAuthenticated = subject.isAuthenticated();//是否认证通过

		System.out.println(IsAuthenticated); //ture

		//执行退出操作
		subject.logout();

		//是否认证通过
		System.out.println(subject.isAuthenticated()); //false

	}

}

代码执行流程分析:

1、通过ini配置文件创建securityManager

2、调用subject.login方法主体提交认证,提交的token

3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。

4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息

最后去执行认证的还是realm。

时间: 2024-12-30 22:43:00

Shiro Review——Shiro介绍的相关文章

Shiro Review——权限管理基础知识

        只要是有用户参与的系统一般都会有权限管理,权限管理实现对用户的访问控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.          权限管理包括用户认证和授权两部分. 一,用户认证      用户去访问系统,系统要验证用户身份的合法性.比较常见的认证方法:1,用户名密码方式:2,指纹识别,比如我们上班打卡:3,基于证书方式:     当系统验证了用户身份的合法性,用户方可访问系统的资源.      1, 用户认证流程           权限管理是基

Shiro Review——自定义Realm实现认证

一,自定义Realm   在之前,使用过下面的ini文件进行认证测试: #对用户信息进行配置 [users] #用户名跟密码 zhangsan=111111 lisi=111111   里面用户的认证信息是写死的,so,now ,来测试下使用自定义Realm来从我们的DB读取User信息,完成用户认证.   首先大致看下Realm的类层级关系:    比如,我们之前使用ini文件中的users配置用户名跟密码的时候,认证和时候使用的Realm就是IniRealm,比如里面的JdbcRealm,我

Shiro Review——自定义Realm实现授权

   在自定义Realm中,可以进对数据库的查询,将认证后的用户的资源权限全部查询出来. /** * 自定义Realm * @author LiuHuiChao * */ public class CustomRealm extends AuthorizingRealm{ @Override public void setName(String name) { super.setName("customName"); } /** * 认证方法 */ @Override protecte

Shiro Review——使用ini文件进行授权测试

一,shiro授权 授权流程:   跟用户的认证流程类似,shrio在用户授权的时候,最后还是去Realm获取信息.    shiro的三种授权方式:   Shiro 支持三种方式的授权: 编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole("admin")) { //有权限 } else { //无权限 } 注解式:通过在执行的Java方法上放置相应的注解完成

Apache Shiro 关于Shiro 授权

授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限.  如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等.  一.授权的三要素  授权有着三个核心元素:权限.角色和用户.  权限 权限是Apache Shiro安全机制最核心的元素.它在应用程序中明确声明了被允许的行为和表现.一个格式良好好的权限声明可以清晰表达出用户对该资源拥有的权限. 大多数的资源会支持典型的CRUD操作(create,read,update,delete),但

【Shiro】Shiro从小白到大神(一)-Shiro入门

本系列是我在学习Shiro的路上的笔记,第一篇是属于非常入门级别的. 首先是介绍了下shiro,然后进行了一个小例子进行实际的操作 本节操作不涉及数据库,只是文本字符操作认证 Shiro简介: 百度百科上的介绍: Apache Shiro(日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用.移动应用到大型网络及企业应用. Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保

【Shiro】Shiro从小白到大神(三)-权限认证(授权)

本节讲权限认证,也就是授权 基于角色的访问控制和基于权限的访问控制的小实例 以及注解式授权和JSP标签授权详解 权限认证 权限认证核心要素 权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源 在权限认证中,最核心的三个要素是:权限,角色和用户 (资源也算一个要素,但不是最核心的) 权限,即操作资源的 权限,比如访问某个页面,以及对某个模块的数据的添加,修改,删除,查看的权利(整合以后,其实就是一些对URL请求的权限) 角色,是权限的集合,一种角色可以包含多种权限(将权限赋给角色) 用户,在

shiro(3)-shiro核心

身份认证 身份认证分三个步骤 1)提交主题和凭据 2)进行身份认证 3)判断是通过,重新提交还是不通过 验证顺序 1)调用subject的login方法,提交主体和凭据. 2)得到对应操作的Security Manager 3)通过Sceurity Manager得到对应的Autherticator实例 4)根据配置策略查找对应的桥信息 5)通过桥信息到对应的配置处理进行身份验证 验证器 如果你想配置一个自定义的验证器 可以在配置文件中使用 [main] ... authenticator =

shiro初步 shiro认证

什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单. shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro. 使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本