【shiro】基本概念

           Apache Shiro是一个强大的且易用的java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,可以快速,轻松的获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

     Shiro是一个开源框架,一个权限管理的框架,在Spring中有Spring security,是一个权限框架,它和Spring依赖过于紧密,虽然功能强大,但是没有shiro简单。shiro实现系统的权限管理,有效提高开发效率,降低开发成本。

 

♦shiro架构

     

 

     shiro的核心组件:subject, SecurityManager,Realms.

 

     1、Subject:

           当前操作用户,但是在shiro中,不仅仅指人,也可以是第三方进程、后台账户,或其他类似事物。它仅仅意味着当前和软件交互的东西。但大部分情况下指用户。

 

      2、SecurityManager:

              它是shiro框架的核心,典型的facade模式,shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

 

      3、Realm:

               它充当了shiro与应用安全数据间的桥梁或连接器。也就是说,当对用户执行认证(登陆)和授权(访问控制)验证时,shiro会从应用配置的realm中查找用户及其权限信息。

               realm实质上是一个安全安全的dao,它封装了数据源的连接细节,并在需要时将相关数据提供给shiro,当配置shiro时,必须至少指定一个realm,用户认证和授权。

              

         Shiro内置了可以链接大量安全数据源的realm,如LDAP、关系数据库JDBC,类似ini文本的配置资源,以及属性文件等。如果缺省的realm不能满足需求,可以插入代表自定义数据源的自己的realm实现。

 

       4、authenticator:

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

 

       5、authorizer:

                授权器,主题进行授权最终通过authorizer。

     

       6、sessionManager:

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

 

       7、sessionDao:

                 通过sessiondao管理session数据。针对个性化的session数据存储需要用到sessionDao.

 

 

       8、cache Manager:

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

 

       9、realm :

                  域,领域,相当于数据源,通过realm存取认证,授权相关数据。在realm中存储授权和认证的逻辑。

 

       10、cryptography:

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

 

♦入门程序:

 

     业务:验证用户登陆用的账号和密码是否正确。

       认证流程:

                             

       代码:

       1、shiro-first.ini(可以分组)

          

[users]
zhangsan=111
lisi=22

[users]
name=1
name2=2

 

 

 

        2、代码:

         

// 用户登陆和退出
	@Test
	public void testLoginAndLogout() {

		// 创建securityManager工厂,通过ini配置文件创建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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//是否认证通过
		boolean isAuthenticated =  subject.isAuthenticated();
		
		System.out.println("是否认证通过:" + isAuthenticated);
		
		//退出操作
		subject.logout();
		
		//是否认证通过
		isAuthenticated =  subject.isAuthenticated();
		
		System.out.println("是否认证通过:" + isAuthenticated);
		
		

	}

 

 

 

小结:

      这篇博客先站在巨人的肩膀上吧。感谢教程!

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值