Spring Security专题

一,什么是Spring Security?

Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架。其前身是Acegi Security,后来被收纳为Spring的一个子项目,并更名为了Spring Security。

Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制,它提供了全面的安全解决方案,同时授权粒度可以在 Web请求级和方法调用级 来处理身份确认和授权

二,Spring Security功能?

Spring Security 的核心功能主要包括如下几个:

认证: 解决 "你是谁" 的问题-->解决的是系统中是否有这个“用户”(用户/设备/系统)的问题,也就是我们常说的“登录”。

授权: 权限控制/鉴别,解决的是系统中某个用户能够访问哪些资源,即“你能干什么”的问题。Spring Security 支持基于 URL 的请求授权、方法访问授权、对象访问授权。

防护攻击: 防止身份伪造等各种攻击手段。

加密功能: 对密码进行加密、匹配等。

会话功能: 对Session进行管理。

RememberMe功能: 实现“记住我”功能,并可以实现token令牌持久化。

三. Spring Security支持的身份认证模式

在Spring Security中,我们除了掌握几个核心功能之外,对于其身份认证模式简单了解一下即可。

在身份验证层面,Spring Security广泛支持各种身份认证模式。这些验证模式绝大多数都是由第三方提供,或相关标准组织提供的,目前Spring Security支持如下认证技术:

HTTP BASIC authentication headers: 一个基于IEFT RFC的标准。

HTTP Digest authentication headers: 一个基于IETF RFC的标准。

HTTP X.509 client certificate exchange: 一个基于IETF RFC的标准。

LDAP: 一种常见的跨平台身份验证方式。

Form-based authentication: 用于简单的用户界面需求。

OpenID authentication: 一种去中心化的身份认证方式。

Authentication based on pre-established request headers: 类似于 Computer Associates SiteMinder,一种用户身份验证及授权的集中式安全基础方案。

Jasig Central Authentication Service: 单点登录方案。

Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker: 一个Spring远程调用协议。

Automatic "remember-me" authentication: 允许在指定到期时间前自行重新登录系统。

Anonymous authentication: 允许匿名用户使用特定的身份安全访问资源。

Run-as authentication: 允许在一个会话中变换用户身份的机制。

Java Authentication and Authorization Service: JAAS,Java验证和授权API.

Java EE container authentication: 允许系统继续使用容器管理这种身份验证方式。

Kerberos: 一种使用对称密钥机制,允许客户端与服务器相互确认身份的认证协议。

四,前辈-Shiro框架简介

Apache Shiro 也是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。Apache Shiro 的首要目标是易于使用和理解,因为安全有时候是很复杂的,甚至是痛苦的,但其实没必要这样。框架应该尽可能掩盖复杂的地方,暴露一个干净而直观的 API,来简化开发人员在应用程序安全上所花费的时间。Apache Shiro 是一个拥有许多功能的综合性的安全框架。

Shiro 中有四大核心功能——身份验证授权会话管理加密

Authentication:简称为“登录”,这是一个证明用户是谁的行为。

Authorization:访问控制的过程,也就是决定“谁”可以去访问“什么”。

Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。

Cryptography:通过使用加密算法保持数据安全同时易于使用。

除此之外,Shiro 也提供了额外的功能,来解决在不同环境下所面临的安全问题,尤其是以下这些:

Web Support:web 支持的 API 能够轻松地保护 Web 应用程序。

Caching:缓存是用来确保操作的快速而又高效的。

Concurrency:Apache Shiro 利用它的并发特性来支持多线程应用程序。

Testing:测试功能来帮助编写单元测试和集成测试。

Run As:一个允许用户 以 另一个用户身份(如果允许) 运行的功能,有时候在管理脚本时很有用。

Remember Me:在会话中记住用户的身份,这样用户只需要在强制登录时登录。

Shiro 框架具有 直观、易用 等特性,同时也能提供了 健壮的安全性,虽然它的功能不如 Spring Security 那么强大,但是在常规的企业级应用中,其实也够用了。

五. Spring Security 与 Shiro对比

1. Spring Security优点

Spring Security基于Spring开发,所以Spring Security与Spring更契合;

Spring Security功能比Shiro更加强大,尤其是在安全防护方面;

Spring Security社区资源比Shiro更加丰富;

Spring Boot/Spring Cloud环境中,更容易集成Spring Security;

Spring Security 具备良好的扩展性,可以满足自定义的要求;

Spring Security对 OAuth2框架支持很好,而Shiro则对 OAuth2 支持不够。

2. Spring Security缺点

Shiro是一个轻量、简单、易于集成的老牌安全框架,而且使用流程简单清晰;反观Spring Security,则属于是重量级、配置繁琐、学习使用门槛高的安全框架。

Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security需要依赖Spring容器。

3. 现在常见的安全技术栈

在目前的Java体系中,我们在进行关于安全方面的开发时,到底该选择Shiro还是Spring Security哪个框架呢?其实我们可以进行如下搭配:

SSM + Shiro Spring Boot/Spring Cloud + Spring Security

就目前而言,Shiro 最大的问题在于和 Spring 家族的产品进行整合时较为不便。在 Spring Boot 推出的很长一段时间里,Shiro 都没有提供相应的 starter,后来虽然有一个 shiro-spring-boot-web-starter 出来,但配置并没有简化多少。所以在 Spring Boot/Spring Cloud 技术栈的微服务项目中,Shiro 几乎不存在优势。但如果你是进行传统的 SSM 项目开发,而不是微服务项目,那么无疑使用 Shiro 是最方便省事的,因为它足够简单,足够轻量级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值