shiro初步了解

shiro初步了解

2023年6月29日发(作者:)

shiro初步了解1. 什么是shiro shiro是apache的⼀个开源框架,是⼀个权限管理的框架,实现 ⽤户认证、⽤户授权。 spring中有spring security (原名Acegi),是⼀个权限框架,它和spring依赖过于紧密,没有shiro使⽤简单。 shiro不依赖于spring,shiro不仅可以实现 web应⽤的权限管理,还可以实现c/s系统, 分布式系统权限管理,shiro属于轻量框架,越来越多企业项⽬开始使⽤shiro。2. 在应⽤程序⾓度来观察如何使⽤Shiro完成⼯作(图01) Subject:主体,代表了当前“⽤户”,这个⽤户不⼀定是⼀个具体的⼈,与当前应⽤交互的任何东西都是Subject,如⽹络爬⾍,机器⼈等;即⼀个抽象概念;所有Subject 都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是⼀个门⾯;SecurityManager才是实际的执⾏者; SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager 交互;且它管理着所有Subject;可以看出它是Shiro 的核⼼,它负责与后边介绍的其他组件进⾏交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器; Realm:域,Shiro从从Realm获取安全数据(如⽤户、⾓⾊、权限),就是说SecurityManager要验证⽤户⾝份,那么它需要从Realm获取相应的⽤户进⾏⽐较以确定⽤户⾝份是否合法;也需要从Realm得到⽤户相应的⾓⾊/权限进⾏验证⽤户是否能进⾏操作;可以把Realm看成DataSource,即安全数据源。

3. shiro架构(图02) 3.1 subject:主体,可以是⽤户也可以是程序,主体要访问系统,系统需要对主体进⾏认证、授权。 3.2 securityManager:安全管理器,主体进⾏认证和授权都是通过securityManager进⾏。securityManager是⼀个集合, 真正做事的不是securityManager⽽是它⾥⾯的东西。 3.3 authenticator:认证器,主体进⾏认证最终通过authenticator进⾏的。 3.4 authorizer:授权器,主体进⾏授权最终通过authorizer进⾏的。 3.5 sessionManager:web应⽤中⼀般是⽤web容器(中间件tomcat)对session进⾏管理,shiro也提供⼀套session管理的⽅式。 shiro不仅仅可以⽤于web管理也可以⽤于cs管理,所以他不⽤web容器的session管理。 3.6 SessionDao: 通过SessionDao管理session数据,针对个性化的session数据存储需要使⽤sessionDao (如果⽤tomcat管理session就不⽤SessionDao,如果要分布式的统⼀管理session就要⽤到SessionDao)。 3.7 cache Manager:缓存管理器,主要对session和授权数据进⾏缓存(权限管理框架主要就是对认证和授权进⾏管理, session是在服务器缓存中的),⽐如将授权数据通过cacheManager进⾏缓存管理, 和ehcache整合对缓存数据进⾏管理(redis是缓存框架)。 3.8 realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据(原来是通过数据库取的)。 注意:authenticator认证器和authorizer授权器调⽤realm中存储授权和认证的数据和逻辑。 3.9 cryptography:密码管理,⽐如md5加密,提供了⼀套加密/解密的组件,⽅便开发。⽐如提供常⽤的散列、加/解密等功能。⽐如md5散列算法(md5只有加密没有解密)。//1.读取加载配置⽂件 IniSecurityManagerFactory//2.创建SecurityManager安全管理器 SecurityManager securityManager = tance();//3.将SecurityManager委托给SecurityUtils管理 urityManager(securityManager); //4.获取主体 Subject subject = ject(); //5.创建token令牌(基于账号密码登陆) UsernamePasswordToken token=new UsernamePasswordToken( "adm","123456" );//6.⾝份验证(token);//7.安全退出 ();导⼊shiro依赖 shiro-core 1.2.5 -- 帐号/密码认证4. Shiro⾝份验证()(插件搜索*.ini安装后才可以使⽤)

⼩结:⾝份验证的步骤 1 收集⽤户⾝份 / 凭证,即如⽤户名 / 密码; 2 调⽤ 进⾏登录,如果失败将得到相应的 AuthenticationException 异常,根据异常提⽰⽤户错误信息;否则登录成功; 3 最后调⽤ 进⾏退出操作。-- zs/ls/ww/admin能有⼀样的操作权限吗?5. Shiro权限认证(⽀持三种⽅式的授权) 5.1 编程式:通过写if/else授权代码块完成 Subject subject = ject(); if(e("admin")) { //有权限 } else { //⽆权限 }

5.2 注解式:通过在执⾏的Java⽅法上放置相应的注解完成,另外,没有权限将抛出相应的异常 @RequiresRoles("admin") public void hello() { //有权限 }

作业1:shiro常⽤注解及作⽤? 5.3 JSP/GSP标签:在JSP/GSP页⾯通过相应的标签完成

6. 授权 6.1 基于⾓⾊的访问控制(|粗颗粒度) 规则:“⽤户名=密码,⾓⾊1,⾓⾊2” ⽅法: hasRole/hasRoles/hasAllRoles和checkRole/checkRoles

注1:hasXxx和checkXxx区别,hasXxx会返回boolean类型的数据,⽤来判断,⽽checkXxx不会返回任何东西, 如果验证成功就继续处理下⾯的代码,否则会抛出⼀个异常UnauthorizedException 6.2 基于资源的访问控制(|细颗粒度) 即:⾸先根据⽤户名找到⾓⾊,然后根据⾓⾊再找到权限 规则1:“⽤户名=密码,⾓⾊1,⾓⾊2” 规则2:“⾓⾊=权限1,权限2”

规则3:“资源标识符:操作:对象实例ID” 即对哪个资源的哪个实例可以进⾏什么操作 注:每个部分可以不填写,默认就是* user:*:* tea:*:* stu:*:* system:user:insert system:*:* ⽅法: isPermitted/checkPermissions

注1:permission:许可,权限 注2:create,update,delete,view这些是可以⾃⾏定义的7. shiro集成web()添加shiro-web依赖 <%@taglib prefix="r" uri="" %> 7.1 配置⽂件 7.2 通过监听器EnvironmentLoaderListener读取配置⽂件,来创建相应的WebEnvironment 注1:可通过shiroConfigLocations参数,指定shiro的配置⽂件 注2:shiroConfigLocations 默认是“/WEB-INF/”,IniWebEnvironment默认是先从/ WEB-INF/加载, 如果没有就默认加载 classpath:。 7.3 配置过滤器ShiroFilter

注1:放在⽂件的最前⾯ 7.4 开发中不断修改配置⽂件8. 其它 8.1 不⾜之处 1. ⽤户名/密码硬编码在ini配置⽂件,以后需要改成如数据库存储,且密码需要加密存储; 2. ⽤户⾝份Token可能不仅仅是⽤户名/密码,也可能还有其他的,如登录时允许⽤户名/邮箱/⼿机号同时登录。 8.2 JUnit4:Test注解的两个属性:expected和timeout expected属性:⽤来指⽰期望抛出的异常类型,抛出指定的异常类型,则测试通过 。 timeout属性:⽤来指⽰时间上限,当测试⽅法的时间超过这个时间值时测试就会失败(注意超时了报的是Errors,如果是值错了是Failures)

9. 配置⽂件 xml properties ini [node] key=value

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687987399a64161.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信