Shiro认证

1.1:Shiro 简介

Apache Shiro 是一个强大易用的 Java安全框架,提供了认证、授权、会话管理和加密等功能,对于任意一个应用程序,Shiro都可以提供全面的安全管理服务,对比Spring Security.可能没有 Spring Security 功能强大,但是我们在实际工作中可能并不需要那么复杂的功能,所以使用简单易用的Shiro就已经足够了。本教程也只介绍基本的Shiro使用,不会过多分析源码等,重在使用.

1.2:Shiro特性

Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在JavaEE 环境。Shiro可以帮助我们完成:认证、投权、会话管理、加密、与 Web集成、缓存等,这不就是我们想要的吗?而且Shiro的API也是非常简单,其基本功能点如下图所示:
在这里插入图片描述

1.3:Shiro核心概念

(1)四大基石:

  • Shiro把Shiro开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。

  • Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。

  • Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。
    Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。

  • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。

(2)也提供了额外的功能来支持和加强在不同环境下所关注的方面,尤其是以下这些:

  • Web Support:Shiro的web支持的API能够轻松地帮助保护 Web 应用程序。

  • Caching:缓存是Apache Shiro中的第一层公民,来确保安全操作快速而又高效。

  • Concurrency:Apache Shiro利用它的并发特性来支持多线程应用程序。
    Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。

  • “Run As”:一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。

  • “Remember Me”:在会话中记住用户的身份,所以他们只需要在强制时候登录。

2.1:Shiro架构

在这里插入图片描述

  • Subject

在我们的教程中已经提到,Subject实质上是一个当前执行用户的特定的安全“视图”。鉴于"User"一词通常意味着一个人,而一个Subject可以是一个人,但它还可以代表第三方服务,daemon account,cron job,或其他类似的任何东西——基本上是当前正与软件进行交互的任何东西。

所有Subject实例都被绑定到(且这是必须的)一个SecurityManager上。当你与一个Subject交互时,那些交互作用转化为与SecurityManager交互的特定subject的交互作用。

  • SecurityManager

SecurityManager是Shiro架构的心脏,并作为一种“保护伞”对象来协调内部的安全组件共同构成一个对象图。然而,一旦SecurityManager和它的内置对象图已经配置给一个应用程序,那么它单独留下来,且应用程序开发人员几乎使用他们所有的时间来处理Subject API。

  • Realms

Realms担当Shiro和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时,Shiro 从一个或多个为应用程序配置的Realm中寻找许多这样的东西。

在这个意义上说,Realm本质上是一个特定安全的DAO:它封装了数据源的连接详细信息,使Shiro所需的相关的数据可用。当配置Shiro时,你必须指定至少一个Realm用来进行身份验证和/或授权。SecurityManager可能配置多个Realms,但至少有一个是必须的。

Shiro提供了立即可用的Realms来连接一些安全数据源(即目录),如LDAP,关系数据库(JDBC),文本配置源,像 INI 及属性文件,以及更多。你可以插入你自己的Realm 实现来代表自定义的数据源,如果默认地Realm不符合你的需求。

像其他内置组件一样,Shiro SecurityManager控制 Realms是如何被用来获取安全和身份数据来代表 Subject 实例的。

2.2:Shiro内部架构图

在这里插入图片描述

3.0:常见的认证异常信息:

  • CredentitalsException 凭证异常
  • IncorrectCredentialsException 不正确的凭证
  • ExpiredCredentialsException 凭证过期
  • AccountException 账号异常
  • ConcurrentAccessException 并发访问异常(多个用户同时登录时抛出)
  • UnknownAccountException 未知的账号
  • ExcessiveAttemptsException 认证次数超过限制
  • DisabledAccountException 禁用的账号
  • LockedAccountException 账号被锁定
  • pportedTokenException 使用了不支持的Token
  • UnauthorizedException: 抛出以指示请求的操作或对请求的资源的访问是不允许的。
  • UnanthenticatedException:当尚未完成成功认证时,尝试执行授权操作时引发异常。

4.0:测试验证一个Subject,Shiro内部认证流程

在这里插入图片描述

  • 流程如下:

  • 1.首先调用 Subject.login(token)进行登录,其会自动委托给 Security Manager,调用之前必须通过 SecurityUtils.setSecurityManager()设置Security Manager;

  • 2.SecurityManager负责真正的身份验证逻辑:它会委托给Authenticator进行身份验证;

  • 3.Authenticator 才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现;

  • 4.Authenticator 可能会委托给相应的 AuthenticationStrategy进行多 Realm 身份验证,默认 ModularRealmAuthenticator 会调用 AuthenticationStrategy 进行多 Realm身份验证;

  • 5.Authenticator 会把相应的 token 传入 Realm,从Realm 获取身份信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个 Realm,将按照相应的顺序及策略进行访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值