Shiro Review——Shiro介绍


一,Shiro整体介绍          

 

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

 

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

shiro不依赖于springshiro不仅可以实现 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

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

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


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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值