简介
Apache Shiro是一个简单、灵活且强大的Java安全框架,用于提供身份验证、授权、加密和会话管理等安全功能。它的设计理念是无侵入性,使得它可以轻松地与任何Java应用程序集成。Shiro提供了一系列内建的安全组件,如Subject(表示当前用户)、SecurityManager(管理所有安全操作)、Realm(与安全数据交互)等。通过这些组件,开发者可以快速实现用户身份验证、授权和会话管理。Shiro还提供了灵活的插件机制和可扩展的API,支持自定义功能和数据源集成。总体而言,Apache Shiro为Java开发者提供了一个全面且易于使用的安全解决方案,适用于各种应用场景,从Web应用程序到企业级应用,都能轻松地添加安全保护。
框架对比
Shiro(Apache Shiro)和Spring Security都是流行的安全框架,它们都提供了一系列的安全功能来帮助开发者保护应用程序。选择使用哪一个框架通常取决于项目的需求和开发者的偏好。以下是Shiro和Spring Security之间的一些主要比较点:
Apache Shiro
- 简单性和灵活性:Shiro设计的目标之一是提供一个简单、直观且灵活的安全框架。它的API设计是直观的,使得开发者可以快速地集成和使用。
- 无侵入性:Shiro可以轻松地与任何Java应用程序集成,而不需要大量的配置。这使得它在微服务和其他轻量级应用程序中非常受欢迎。
- 内建功能:Shiro提供了许多内建的安全功能,如身份验证、授权、加密和会话管理等。
- 社区支持:虽然相对于Spring Security来说,Shiro的社区规模可能较小,但它仍然有一个活跃的社区,提供各种教程、文档和支持。
Spring Security
- 深度整合:Spring Security是Spring框架的一部分,因此它与Spring生态系统的其他组件(如Spring Boot、Spring MVC等)有深度的整合,提供了更加一致和完善的体验。
- 强大的功能:Spring Security提供了一套全面的安全功能,包括基于角色的授权、方法级别的安全、OAuth支持、单点登录(SSO)等。
- 大型社区和广泛支持:由于Spring的流行性,Spring Security有一个非常庞大和活跃的社区。这意味着你可以轻松地找到大量的资源、教程和第三方库。
- 复杂性和学习曲线:尽管Spring Security功能强大,但它的配置和使用可能比Shiro复杂一些,特别是对于新手来说。
总结
Shiro 适合那些需要快速集成和简单使用的项目,特别是轻量级应用或者希望避免复杂配置的项目。
Spring Security 适合大型、复杂的企业级应用,特别是那些已经使用或计划使用Spring框架的项目,因为它提供了深度的整合和更多的高级功能。
因此小鹿认为:对于初学者或者一些个人开发的项目来说,Shiro框架提供的安全性完全是足够用的。
开始整合
首先在项目中引入依赖

这里需要注意的是:Shiro框架所需要的依赖原则上只有第一个,第二个依赖只是因为小鹿所写的代码恰好需要这个依赖而已。如果你接下来需要跟着小鹿一步一步实现的话,小鹿建议你和我一样将该依赖进行导入。
除此以外还需要引入redis和JPA,这两者的作用主要是结合数据库查询用户和Token存储,另外所需要用到的业务插件我在这里也会提到。
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--JDBC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- shiro-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!--mysql-connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<scope>runtime</scope>
</dependency>
<!-- druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency

2万+

被折叠的 条评论
为什么被折叠?



