什么是Shiro:
Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理
Shiro的核心功能包括:
- 身份验证(Authentication):验证用户的身份,确保用户是合法的。
- 授权(Authorization):控制用户对系统资源的访问权限,限制用户只能访问其被授权的部分。
- 会话管理(Session Management):管理用户会话,跟踪用户的登录状态和活动,并提供会话的持久化支持。
- 密码加密(Cryptography):提供密码加密和解密的支持,确保用户的密码在存储和传输过程中的安全性。
- Web支持:提供与Web应用程序集成的支持,包括集成主流Web框架(如Spring、Struts)和处理Web请求的过滤器等。
Shiro主要组件及相互作用:
-
Subject(主体):
- Subject 表示当前正在与应用程序交互的用户。可以是一个人、设备或其他系统实体。
- Subject 封装了用户的身份和相关的安全操作,如登录、注销、权限检查等。
-
SecurityManager(安全管理器):
- SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。
- SecurityManager 管理一个或多个 Realms,用于进行身份验证和授权。
-
Realm(域):
- Realm 是连接 Shiro 和安全数据源(如数据库、LDAP 等)的桥梁。
- Realm 负责从数据源中获取用户的身份和权限信息,并提供给 SecurityManager 进行验证和授权操作。
-
Authenticator(身份验证器):
- Authenticator 负责对用户进行身份验证。
- Authenticator 使用 Realm 获取用户的身份信息,并将其与用户提供的凭据进行比较,以确定用户是否合法。
-
Authorizer(授权器):
- Authorizer 负责对用户进行授权,确定用户是否有权访问特定资源。
- Authorizer 使用 Realm 获取用户的角色和权限信息,并与应用程序定义的角色和权限进行匹配,以决定用户是否被授权访问资源。
-
SessionManager(会话管理器):
- SessionManager 负责管理用户的会话。
- SessionManager 创建、维护和关闭用户会话,并提供会话的持久化支持。
-
SessionDAO(会话数据访问对象):
- SessionDAO 是用于会话数据的读取和存储的接口。
- SessionDAO 与数据库或其他存储介质交互,将会话数据持久化或从持久化存储中读取会话数据。
这些组件相互协作,形成了 Shiro 的安全框架。Subject 通过 SecurityManager 进行身份验证和授权操作,SecurityManager 使用 Realm 获取用户的身份和权限信息。而我们需要实现Realms的Authentication 和 Authorization。Authenticator 负责身份验证,Authorizer 负责授权,SessionManager 负责会话管理。SessionDAO 则提供会话数据的读取和存储支持。通过这
种相互作用,Shiro 提供了完善的安全功能,保护应用程序的安全性。
Shiro 认证过程:
- 用户提交身份信息:用户在应用程序的登录页面输入用户名和密码,并提交身份信息。
- Subject 提交身份信息:应用程序接收到用户提交的身份信息后,将其封装为 Subject 对象。
- SecurityManager 开始认证:SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。它接收到 Subject 提交的身份信息后,开始进行身份验证。
- SecurityManager 调用 Authenticator 进行身份验证:SecurityManager 会调用配置好的 Authenticator 进行身份验证。
- Authenticator 获取身份信息:Authenticator 使用 Realm(可能是单个 Realm 或多个 Realm 的组合)从数据源中获取用户的身份信息。
- Realm 获取用户身份信息:Realm 是连接 Shiro 和安全数据源的桥梁。它根据配置的方式(如数据库、LDAP 等)获取用户的身份信息。
- Authenticator 进行身份匹配:Authenticator 将用户提交的身份信息和 Realm 获取到的用户身份信息进行匹配,以确定用户是否合法。
- 认证结果返回给 SecurityManager:Authenticator 将认证结果(通过或失败)返回给 SecurityManager。
- SecurityManager 处理认证结果:SecurityManager 根据认证结果,如果认证成功,则将用户标记为已认证状态,并将用户的身份信息存储在 Subject 中供以后使用。如果认证失败,则抛出相应的异常。
- 认证结果返回给应用程序:SecurityManager 将认证结果返回给应用程序,应用程序可以根据认证结果决定如何处理。
Shiro 授权过程:
-
用户发起访问请求:
用户在应用程序中发起对某个资源的访问请求,例如访问一个特定的 URL 或执行某个操作。 -
Subject 发起授权请求:
Subject 对象封装了当前用户的身份信息和相关的安全操作。当用户发起访问请求时,Subject 对象会将授权请求发送给 SecurityManager。 -
SecurityManager 开始授权:
SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。它接收到 Subject 的授权请求后,开始进行授权处理。 -
SecurityManager 调用 Authorizer 进行授权:
SecurityManager 会调用配置好的 Authorizer 进行授权操作。 -
Authorizer 获取用户角色和权限信息:
Authorizer 使用 Realm(可能是单个 Realm 或多个 Realm 的组合)从数据源中获取当前用户的角色和权限信息。 -
Authorizer 进行角色和权限匹配:
Authorizer 将用户的角色和权限信息与应用程序定义的角色和权限进行匹配,以确定用户是否有权访问请求的资源。 -
授权结果返回给 SecurityManager:
Authorizer 将授权结果(允许访问或拒绝访问)返回给 SecurityManager。 -
SecurityManager 处理授权结果:
SecurityManager 根据授权结果,如果授权成功,则允许用户访问请求的资源。如果授权失败,则抛出相应的异常或采取其他处理措施。 -
授权结果返回给应用程序:
SecurityManager 将授权结果返回给应用程序,应用程序可以根据授权结果决定如何处理用户的访问请求。
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!