Skip to content

⭐ Shiro 工作原理

📌 Shiro 核心功能:

Shiro是一个安全框架,不提供用户以及权限的维护(用户的权限管理需要我们自己去设计对应的数据库表信息进行维护)。

  • Anthentication 认证:验证用户是否有响应的身份(进行登录)
  • Anthorization 授权,即权限验证:对已经通过认证的用户检查是否具有某个权限或者角色,从而控制是否能进行某种操作。
  • Session Management 会话管理:用户在认证成功之后创建会话,在没有退出之前,当前用户的所有信息都会保存在这个会话 Session中。(可以是普通的JavaSE应用,也可以是Web应用)
  • Cryptography 加密:针对用户的敏感信息进行加密处理,Shiro提供了加密机制

同时Shiro还提供了其他的特性功能支持:

  • Web SupportShiro提供了过滤器,可以通过过滤器拦截Web请求来处理Web应用的访问控制
  • Caching 缓存支持:Shiro可以缓存用户信息以及用户的角色权限信息,可以提高执行效率
  • ConcurrenyShiro 支持多线程应用
  • TestingShiro提供测试支持
  • Run As:允许用户以另外一个身份去访问
  • Remember MeShiro提供了记住权限身份信息的功能

📌 Shiro 核心组件:

1.Subject:

Subject表示待授权和认证的用户。

2.Security Manager:

Security Manager Shiro 框架的核心,Shiro通过Security Manager 来进行内部实例的管理,并通过它来提供各种安全管理的各种服务。 Security Manager 中包含以下组件:

  • Authenticator :认证器
  • Authorizer :授权器
  • Session Manager:会话管理器
  • Caching Manager:缓存管理器

3.Realms:

Realms相当于Shiro进行认证和授权的数据源,充当了Shiro与安全数据(数据库数据等)之间的 "桥梁" 或者 "连接器"。当用户进行认证(登录)和授权(访问控制)验证时,Shiro会在应用配置的Realm中查找用户及权限信息。


📌 Shiro 认证授权流程:

通过Subject.login(token)进行登录,就会将Token中包含用户信息(账号和密码)传递给Security ManagerSecurity Manager就会调用Authenticator进行身份认证。AuthenticatorToken传递给对应的RealmRealm更具得到的Token,调用doGetAuthenticationInfo()方法进行认证,如果认知失败就会抛出异常提示认证器。异常信息会一层一层向上抛出直到返回Subject,当Subject抛出异常则表示认证失败。