Java安全框架
文章目录
前言
本文将介绍两个常见且强大的安全框架Spring Security和Shiro。
一、Spring Security
Spring Security是Spring 家族的一员,它通过提供完整可扩展的认证和授权支持来保护程序。
它还充分利用了Spring IoC(控制反转)、DI(依赖注入)和AOP(面向切面编程)的功能,提供了大量在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全访问控制功能,减少了为系统安全权限控制而编写大量重复代码的工作。
它是一个重量级的安全框架,搭配了流行的安全算法实现。安全控制主要包括“认证”与“授权”两个操作。
- “认证”是验证确认身份以授予对系统的访问权限,是验证用户凭据以获得用户访问权限的过程。它决定用户是否是他声称的用户。
- “授权”是确定你是否有权访问资源,是验证是否允许访问的过程。它确定用户可以访问和不访问的内容。
详细可参考Spring Security
二、Shiro
Shiro是Apache 旗下的轻量级权限控制框架。它主张的理念是把复杂的事情变简单,针对有更高要求性能的互联网应用有着更好的表现。
Shiro有着很好的通用性,不局限于Web 环境,但在Web 环境下一些特定的需求需要手动编写代码定制,有一定的代码侵入。
Shiro有着易于理解的 Java Security API、简单的身份认证,支持多种数据源,能对角色的简单的签权,支持细粒度的签权,内置会话管理,简单的加密 API,不跟任何的框架捆绑,可以独立运行。
Shiro的三个核心组件:Subject,SecurityManager 和 Realms.
Subject:主体,与当前应用交互的任何东西。
所有Subject都会绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager。Subject相当于门户,SecurityManager是执行者;
SecurityManager:安全管理器。所有与安全有关的操作都会与SecurityManager交互,管理着所有Subject。它是Shiro的核心,负责与其它组件进行交互。
Realm:域。Realm类似于安全数据源。Shiro将会从Realm获取安全数据(如用户、角色、权限)。
如果SecurityManager需要验证用户身份,那么它需要从Realm获取相应的用户信息进行比较以确定用户身份是否合法,也需要从Realm得到用户相对应的角色或者权限进行验证用户是否能进行操作。
三、对比
在 Spring Boot 出现之前,Spring Security 虽然已经发展了很久,但因为其使用过于复杂,所以尽管功能比Shiro强大,但使用的并不多,而且一般来说,Shiro的功能足以够一般项目使用。在安全管理这个领域,以往一直是使用 Shiro居多。
自从有了Spring Boot 之后,Spring Boot为Spring Security提供了自动化配置,Spring Security的使用频率才高起来。
因此,常见的安全管理技术栈的组合为:
SSM + Shiro和Spring Boot/Spring Cloud + SpringSecurity
但技术栈是通用的,可以任意组合。
1.相同点
- 认证授权功能
- 加密功能
- 会话管理
- 缓存支持
2.不同点
- Spring Security是一个重量级的安全管理框架,Shiro则是一个轻量级的安全管理框架
- Spring Security是Spring家族的一员,能更好地基于Spring家族开发
- Spring Security功能比Shiro更加丰富、强大
- Shiro的配置和使用比较简单,Spring Security使用比较复杂;
- Shiro依赖性低,不需要任何框架和容器,可以独立运行, 而Spring Security依赖Spring容器;
- Shiro不局限于Web环境中,它可以工作在任何应用环境中。
总结
本文简单地介绍了SpringSecurity和Shiro两种安全框架的特点以及其区别。
版权归原作者 追风_CJJ 所有, 如有侵权,请联系我们删除。