跟我学Shiro:从入门到精通

4星 · 超过85%的资源 需积分: 29 18 下载量 113 浏览量 更新于2024-07-21 收藏 4.16MB PDF 举报
"Shiro教程.pdf,涵盖了从基础到高级的Shiro使用,包括身份验证、授权、配置、Web集成、拦截器、JSP标签、会话管理和缓存机制等内容,适合Java开发者学习Shiro安全框架。" Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常简洁地为应用程序提供全面的安全管理服务。本教程详细介绍了Shiro的主要特性和使用方法。 1. **Shiro简介** Shiro的核心概念包括Subject、SecurityManager、Realm等。Subject代表当前用户,SecurityManager是Shiro的中枢,负责协调各个组件工作,而Realm则连接应用程序的业务数据源,用于认证和授权。 2. **身份验证(Authentication)** - **环境准备**:在开始身份验证之前,需要设置好Shiro环境,包括SecurityManager和Realm。 - **登录/退出**:Shiro提供了一套完整的登录和退出流程,通过提交用户名和密码进行认证。 - **身份认证流程**:包括凭证匹配、身份验证和授权三个步骤。 - **REALM**: Realm是Shiro与应用程序数据源交互的桥梁,实现认证和授权的具体逻辑。 3. **授权(Authorization)** - **授权方式**:Shiro支持基于角色的访问控制(RBAC)和其他灵活的授权方式。 - **PERMISSION**:Permission是授权的基本单元,用于描述用户可以执行的操作。 - **授权流程**:Shiro通过AUTHORIZER、PERMISSIONRESOLVER和ROLEPERMISSIONRESOLVER完成权限判断。 4. **INI配置** - **根对象SECURITYMANAGER**:配置文件中的核心对象,负责管理所有安全相关的组件。 - **INI配置**:Shiro可以通过INI配置文件来设置各种安全策略和组件。 5. **编码/加密** - **编码/解码**:Shiro提供了一些常见的编码和解码工具,如Base64、Hex等。 - **散列算法**:Shiro支持多种散列算法,用于密码存储的安全性。 - **加密/解密**:提供加密和解密功能,确保敏感信息的安全传输。 - **PASSWORDSERVICE/CREDENTIALSMATCHER**:密码服务和凭证匹配器是密码验证的关键组件。 6. **REALM及相关对象** - **REALM**:与数据源交互的接口,处理认证和授权信息。 - **AUTHENTICATIONTOKEN**:表示用户的登录信息,如用户名和密码。 - **AUTHENTICATIONINFO**:包含认证的所有信息,由Realm提供。 - **PRINCIPALCOLLECTION**:存储Subject的主要标识集合。 - **AUTHORIZATIONINFO**:授权信息,包含用户的角色和权限。 - **SUBJECT**:表示应用程序中的主体,可以是用户、系统进程等。 7. **与WEB集成** - **准备环境**:配置Web应用环境,如Servlet容器。 - **SHIROFILTER**:ShiroFilter是Web应用的入口,处理请求过滤和重定向。 - **WEB INI配置**:Web应用的特定配置,用于设定过滤器链。 8. **拦截器机制** - **拦截器介绍**:Shiro使用拦截器实现权限控制,类似Spring MVC的拦截器。 - **拦截器链**:定义了拦截器执行的顺序。 - **自定义拦截器**:允许开发者根据需求定制拦截器。 - **默认拦截器**:Shiro提供了一系列内置拦截器,如authc、perms等。 9. **JSP标签** - Shiro提供了一系列JSP标签,方便在视图层进行权限控制。 10. **会话管理(Session Management)** - **会话**:Shiro提供了会话管理,可以跟踪用户状态。 - **会话管理器**:负责会话的创建、更新和销毁。 - **会话监听器**:监听会话事件,如创建、过期等。 - **会话存储/持久化**:支持将会话持久化到数据库或其他存储介质。 - **会话验证**:定期检查会话的有效性。 11. **缓存机制** - **REALM缓存**:缓存Realm查询到的身份认证和授权信息,提高性能。 - **SESSION缓存**:对会话数据进行缓存,减少对存储的访问。 12. **与SPRING集成** - **JAVA SE应用**:在无Web环境下的Spring应用集成Shiro。 - **WEB应用**:在Spring MVC或Spring Boot Web应用中集成Shiro。 - **SHIRO权限注解**:利用Shiro的注解进行方法级别的权限控制。 通过这个教程,开发者能够全面了解并掌握Apache Shiro的安全框架,实现高效、安全的Java应用。

SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. Exception in thread "main" org.apache.shiro.config.ConfigurationException: Unable to instantiate class [org.apache.shiro.web.mgt.DefaultWebSecurityManager] for object named 'securityManager'. Please ensure you've specified the fully qualified class name correctly. at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:309) at org.apache.shiro.config.ReflectionBuilder$InstantiationStatement.doExecute(ReflectionBuilder.java:927) at org.apache.shiro.config.ReflectionBuilder$Statement.execute(ReflectionBuilder.java:887) at org.apache.shiro.config.ReflectionBuilder$BeanConfigurationProcessor.execute(ReflectionBuilder.java:765) at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:260) at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:167) at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:130) at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:108) at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:94) at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46) at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123) at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47) at com.xiu.Quickstart.main(Quickstart.java:26) Caused by: org.apache.shiro.util.UnknownClassException: Unable to load class named [org.apache.shiro.web.mgt.DefaultWebSecurityManager] from the thread context, current, or system/application ClassLoaders. All heuristics have been exhausted. Class could not be found. at org.apache.shiro.util.ClassUtils.forName(ClassUtils.java:152) at org.apache.shiro.util.ClassUtils.newInstance(ClassUtils.java:168) at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:302) ... 12 more

2023-06-10 上传