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 的两个主要组件。

  1. Authentication - 身份验证是确保持用户或客户端是其声称的身份。Spring Security 以多种方式使我们能够执行身份验证。Spring Security 支持基本身份验证、LDAP 身份验证、JDBC 身份验证等。

  2. Authorization - 授权确保用户是否对该操作具有访问权限。如果我们的应用程序是一个复杂的应用程序,具有不同类型的用户,例如管理员、普通用户、其他权限较低的用户,我们需要维护应用程序中的访问控制。例如,来宾用户不应该能够访问管理员内容。因此,为了控制对应用程序中各种资源的访问,我们需要检查用户是否具有访问该资源的权限。Spring Security 支持角色、声明等以提供用户级别授权。

Spring Security 支持大量的身份验证模型。其中大多数身份验证模型是由第三方或互联网工程任务组 (IETF) 作为一个标准机构开发的。由于能够与广泛的第三方 autentication 模型集成,spring security 在开发人员中变得非常流行,以集成到他们的项目中。Spring 也提供了自己的身份验证功能。以下列表显示了 Spring 安全支持的各种身份验证方法。

  1. HTTP BASIC authentication headers

  2. HTTP Digest authentication headers

  3. HTTP X.509 客户端证书交换

  4. LDAP

  5. Form-based authentication

  6. OpenID authentication

  7. 基于预先建立的请求标题的身份验证

  8. JA-SIG 中央身份验证服务,一个开源单点登录系统

  9. 用于远程方法调用 (RMI) 和 HttpInvoker 的透明身份验证上下文传播

  10. Remember Me

  11. Anonymous authentication

  12. Run-as authentication

  13. Java 身份验证和授权服务 (JAAS)

  14. JEE container autentication

  15. Kerberos

  16. Java 开源单点登录 (JOSSO)

  17. OpenNMS Network Management Platform

  18. AppFuse

  19. AndroMDA

  20. Mule ESB

  21. Direct Web Request (DWR)

  22. Grails

  23. Tapestry

  24. JTrac

  25. Jasypt

  26. Roller

  27. Elastic Path

  28. 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 项目。