您的位置:首页 > 其它

【shiro】入门程序

2017-12-19 11:42 239 查看
           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);

}


小结:

      这篇博客先站在巨人的肩膀上吧。感谢教程!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: