【shiro】入门程序

来源:互联网 发布:windows 无法引导 编辑:程序博客网 时间:2024/06/02 02:37

           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=111lisi=22[users]name=1name2=2

        2、代码:

         

// 用户登陆和退出@Testpublic void testLoginAndLogout() {// 创建securityManager工厂,通过ini配置文件创建securityManager工厂Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");//创建SecurityManagerSecurityManager securityManager = factory.getInstance();//将securityManager设置当前的运行环境中SecurityUtils.setSecurityManager(securityManager);//从SecurityUtils里边创建一个subjectSubject subject = SecurityUtils.getSubject();//在认证提交前准备token(令牌)UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111");try {//执行认证提交subject.login(token);} catch (AuthenticationException e) {// TODO Auto-generated catch blocke.printStackTrace();}//是否认证通过boolean isAuthenticated =  subject.isAuthenticated();System.out.println("是否认证通过:" + isAuthenticated);//退出操作subject.logout();//是否认证通过isAuthenticated =  subject.isAuthenticated();System.out.println("是否认证通过:" + isAuthenticated);}

小结:

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

原创粉丝点击