Shiro框架详解(架构原理及使用示例)

Shiro框架详解(架构原理及使用示例)-mikechen

Shiro框架概述

Shiro框架一个强大且易于使用的开源安全框架,用于处理身份认证、授权、会话管理和密码加密等安全相关的任务。

Shiro框架是Apache软件基金会的一个顶级项目,旨在简化Java应用程序的安全性开发。

Shiro提供了一个综合的解决方案,使得开发人员可以轻松地集成安全性功能到他们的应用程序中。

 

Shiro框架作用

Shiro框架的主要作用包括:

Shiro框架详解(架构原理及使用示例)-mikechen

1.身份认证

Shiro允许应用程序验证用户的身份,确保用户是合法的并且已成功登录。

2.授权

Shiro提供了一种灵活的方式来定义和管理用户对资源,比如:URL、方法、文件等的访问权限,并且支持基于角色和权限的访问控制。

3.会话管理

Shiro可以管理用户的会话,包括跨页面的状态保持、会话过期和会话管理等功能。

4.密码加密

Shiro提供了密码加密和验证的支持,以确保存储在数据库中的用户密码是安全的。

 

Shiro框架组件

Shiro 架构包含三个主要的组件,如下图所示:

Shiro框架详解(架构原理及使用示例)-mikechen

分别是:Subject(主体)、SecurityManager(安全管理器)、Realm(领域)。

1.Subject(主体)

Subject是Shiro的核心概念,表示应用程序的用户或系统的代表。

Subject负责执行身份认证、授权、会话管理等操作。

2.SecurityManager(安全管理器)

SecurityManager是Shiro的核心组件,管理Subject、Realm(用于验证和授权)、Session等。

SecurityManager的配置是Shiro的关键部分,它决定了整个安全体系的行为。

3.Realm(领域)

Realm是Shiro的数据源,用于获取用户信息、验证身份和授权。

Realm是与应用程序的数据源交互的桥梁,开发人员需要实现Realm接口以适应应用程序的数据源,例如:数据库、LDAP、自定义数据源等。

 

Shiro框架架构

Shiro框架架构,如下图所示:
Shiro框架详解(架构原理及使用示例)-mikechen

主要会涉及到:

  • Subject:表示当前操作的用户,可以是个人用户或者系统账户。Subject可以执行身份认证和授权操作。
  • SecurityManager:是Shiro的核心组件,负责协调各种安全操作。它管理着Subject、Realm(用于验证和授权)、Session等。
  • Realm:Realm是Shiro的数据源,用于获取用户信息、验证身份和授权。开发者需要实现Realm接口以适应应用程序的数据源。
  • SessionManager:管理用户的会话,可以配置会话的过期时间、存储位置等。
  • Cryptography:Shiro支持密码加密,以确保用户密码的安全存储。
  • Authentication:负责身份认证,验证用户是否合法。
  • Authorization:负责授权,确定用户是否有权访问某个资源或执行某个操作。

 

Shiro框架流程

Shiro的基本工作流程,如下图所示:

Shiro框架详解(架构原理及使用示例)-mikechen

主要包含如下步骤:

1.身份认证(Authentication)

用户发起登录请求,提供用户名和密码,Shiro使用Subject执行身份认证,通过Realm验证用户的身份。

2.授权(Authorization)

当用户尝试访问受保护的资源或执行某个操作时,Shiro执行授权操作。

Shiro检查Subject的角色和权限,以确定用户是否有权访问资源。

如果授权成功,用户可以访问资源或执行操作,否则将拒绝访问。

3.会话管理(Session Management)

Shiro可以管理用户的会话,包括会话的创建、过期、销毁等。

4.密码加密(Cryptography)

Shiro支持密码加密和验证,开发人员可以选择使用Shiro提供的密码加密算法,也可以自定义密码加密逻辑。

 

Shiro框架使用

1.引入Shiro依赖

项目中引入Shiro的依赖,如下所示:

  1. org.apache.shiro
  2. shiro-core
  3. 1.8.1
  4.  

 

2.配置Shiro

在项目中配置Shiro的各个组件,包括Realm、SecurityManager、SessionManager等。

如下所示:

  1. [main]
  2. securityManager = org.apache.shiro.web.mgt.DefaultWebSecurityManager
  3.  
  4. [users]
  5. # 用户名和密码的定义
  6. username = password, role1, role2
  7.  
  8. [roles]
  9. # 角色的定义
  10. role1 = permission1, permission2
  11. role2 = permission3
  12.  
  13. [urls]
  14. # URL权限的配置
  15. /admin/** = authc, roles[admin]
  16. /user/** = authc, roles[user]
  17. /public/** = anon

 

3.编写Realm

Realm是Shiro的关键组件,需要实现一个或多个Realm来连接到应用程序的数据源,验证用户的身份和执行授权操作。

如下所示:

  1. public class MyRealm extends AuthorizingRealm {
  2. @Override
  3. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  4. // 执行授权操作,返回用户的角色和权限信息
  5. // 实现授权逻辑
  6. return authorizationInfo;
  7. }
  8.  
  9. @Override
  10. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  11. // 执行身份认证操作,验证用户名和密码
  12. // 实现身份认证逻辑
  13. return authenticationInfo;
  14. }
  15. }

 

4.写应用程序代码

在您的应用程序代码中,您可以使用Shiro的Subject对象执行身份认证和授权操作。

  1. // 获取当前用户的Subject
  2. Subject currentUser = SecurityUtils.getSubject();
  3.  
  4. // 身份认证
  5. if (!currentUser.isAuthenticated()) {
  6. UsernamePasswordToken token = new UsernamePasswordToken("username", "password");
  7. currentUser.login(token);
  8. }
  9.  
  10. // 执行授权操作
  11. if (currentUser.hasRole("admin")) {
  12. // 用户拥有"admin"角色
  13. }
  14.  
  15. if (currentUser.isPermitted("read")) {
  16. // 用户拥有"read"权限
  17. }

 

5.集成Shiro到应用程序

最后,需要将Shiro集成到您的应用程序中,以确保安全性功能生效。

这通常涉及到配置Web容器(如Apache Tomcat)或其他应用程序环境来使用Shiro的过滤器,以拦截请求并进行身份认证和授权检查。

 

Shiro框架总结

Shiro框架的架构涵盖了核心组件Subject、SecurityManager和Realm,以及身份认证、授权、会话管理和密码加密等核心功能。

Shiro框架可以适应各种数据源和应用场景,提供灵活的配置选项,使得开发人员能够轻松地集成安全性功能。

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!