Spring Security 简明教程
Spring Security - Introduction
What is Spring Security?
Spring Security 是 Spring 项目或模块之一,用于保护基于 Spring 的应用程序。Spring Security 为我们在应用程序中实施身份验证和授权提供了许多内置功能。我们可以将这些功能与更改结合使用来非常快速地保护应用程序。除此之外,Spring Security 还允许大量自定义之前提到的功能,以实施我们自己的复杂身份验证和授权。
除了提供各种内置认证和授权选项之外,Spring Security 还允许我们尽可能地自定义认证流程,从自定义登录页面到我们自己的自定义认证提供程序和认证过滤器,我们几乎可以自定义认证流程的每一个方面。我们可以定义自己的认证流程,该流程可以从使用用户名和密码的基本认证到使用令牌和 OTP 的复杂认证,例如双因素认证。此外,我们可以使用各种数据库(包括关系型和非关系型数据库),使用各种密码编码器,将恶意用户锁定在账户之外,等等。
Authentication and Authorization
身份验证和授权是 Spring Security 的两个主要组件。
-
Authentication - 身份验证是确保持用户或客户端是其声称的身份。Spring Security 以多种方式使我们能够执行身份验证。Spring Security 支持基本身份验证、LDAP 身份验证、JDBC 身份验证等。
-
Authorization - 授权确保用户是否对该操作具有访问权限。如果我们的应用程序是一个复杂的应用程序,具有不同类型的用户,例如管理员、普通用户、其他权限较低的用户,我们需要维护应用程序中的访问控制。例如,来宾用户不应该能够访问管理员内容。因此,为了控制对应用程序中各种资源的访问,我们需要检查用户是否具有访问该资源的权限。Spring Security 支持角色、声明等以提供用户级别授权。
Spring Security 支持大量的身份验证模型。其中大多数身份验证模型是由第三方或互联网工程任务组 (IETF) 作为一个标准机构开发的。由于能够与广泛的第三方 autentication 模型集成,spring security 在开发人员中变得非常流行,以集成到他们的项目中。Spring 也提供了自己的身份验证功能。以下列表显示了 Spring 安全支持的各种身份验证方法。
-
HTTP BASIC authentication headers
-
HTTP Digest authentication headers
-
HTTP X.509 客户端证书交换
-
LDAP
-
Form-based authentication
-
OpenID authentication
-
基于预先建立的请求标题的身份验证
-
JA-SIG 中央身份验证服务,一个开源单点登录系统
-
用于远程方法调用 (RMI) 和 HttpInvoker 的透明身份验证上下文传播
-
Remember Me
-
Anonymous authentication
-
Run-as authentication
-
Java 身份验证和授权服务 (JAAS)
-
JEE container autentication
-
Kerberos
-
Java 开源单点登录 (JOSSO)
-
OpenNMS Network Management Platform
-
AppFuse
-
AndroMDA
-
Mule ESB
-
Direct Web Request (DWR)
-
Grails
-
Tapestry
-
JTrac
-
Jasypt
-
Roller
-
Elastic Path
-
Atlassian Crowd
我们也可以将自己的自定义身份验证机制与 Spring 安全集成。
History of Spring Security
Spring Security 于 2003 年底作为 The Acegi Security System for Spring 一个基于 Spring 的简单安全实现开始。后来当 spring 社区成员询问现有框架时,它被分配给一个社区成员进行工作,到 2004 年 1 月,一个 20 多人的团队开始在这个项目中工作,该项目后来于 2004 年 3 月建立为 SourceForge 项目。最初,spring security 还没有身份验证模块,它完全依赖于容器托管的安全和 Acegi 安全系统,后者只关注授权模块。
在第二年,2005 年,引入了 Acegi Security 特定身份验证服务,而 Acegi Security System 成为官方 Spring 子项目。2006 年 5 月,在用于众多产品软件、社区改进和错误修复后,1.0.0 版发布。到 2007 年底,Acegi Security System 被重新命名为 Spring Security 并成为官方 Spring Portfolio 项目。