程序员

Shiro简介,认证,授权

2018-05-10  本文已影响0人  LoveQueena

最近在学习Shiro,所以写下这篇文章记录下自己的学习成果,可能在学习过程中存在一些理解性不透彻,或者错误的地方。分享给大家,希望大家给出一些自己理解建议,大家能一起进步。


Shiro的简介:

1、 什么是Shiro?

1、Apache的强大灵活的开源安全架构

2、实现用户认证,授权,企业会话管理,安全加密,缓存管理

2、Shiro整体架构 

shiro的整理架构,如图所示:

框架中提供了认证,授权等,解析如下:

1、红色框中,使用的用户,也就是够被嵌入到的语言,框架

2、Authenticator:认证器,管理登录的登入/登出

3、Authorizer:授权器,授予主体有哪些权限

4、Session Manager:Session管理器,自身管理session,可无需借助任何web容器的情况下管理session。

5、Session Dao:提供session的操作,提供增删改查功能

6、Cache Manager:缓存管理器,缓存角色数据和权限数据

7、Pluggable Realms:链接数据库的桥梁,获取角色数据和权限数据等

8、Cryptography:对数据进行加密

3、与Spring Security的对比

Shiro:1、比较简单,灵活  2、可以脱离Spring独立使用   3、粒度比较粗

Spring Security: 1、比较复杂,笨重   2、不可脱离Spring独立使用   3、粒度更细

Shiro认证

1、Shiro认证主要调用的是框架中的Authenticator(认证器),认证步骤分为五步:

一 、创建Security Manager  

二、主体提交认证

三、Security Manager认证

 四、Authenticator认证

五、Realm验证

如图:

2、代码实现

      Test测试类编写 

       SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();

       @Beafor

       public void addUser(){

               simpleAccountRealm.addAccount(username,password);

       }

   注:username,password编写时用具体的用户名,密码验证

       1、创建SecurityManager

            DefaultSecurityManager manager = new DefaultSecurityManager();

       2、初始化realm

             manager.setRealm(simpleAccountRealm);

       3、主体提交认证请求

             SecurityUtils.setSecurityManager(manager);

            (1)、获取主体  

             Subject subject = SecurityUtils.getSubject();   

            (2)、获取Token

                  UsernamePasswordToken token = new UsernamePasswordToken(username,password);

            (3)、提交主体

                  subject.login(token);

            (4)、验证主体

                  subject.isAuthenticated();

Shiro授权

1、shiro授权跟认证差不多,只是使用了授权器(Authorizer),步骤如下:

     一、创建SecurityManager

     二、主体授权

    三、SecurityManager授权

    四、Authorizer授权

    五、Realm获取角色权限数据

2、代码实现(在认证的基础上添加授权代码)

      修改认证代码

      1、修改SimpleAccountManager

            simpleAccountManager.addAccount(username,password,"admin","root");

            password后为权限roles,加粗部门为授权信息,可以用逗号分隔实现多权限配置(admin,root则为设置的权限信息)

       2、主体添加checkRoles

            subject.checkRoles("admin","root");

上一篇下一篇

猜你喜欢

热点阅读