Spring Security 核心功能

对于一个安全管理框架而言,无论是 Shiro 还是 Spring Security,最核心的功能,无非就是如下两方面:

  • 认证

  • 授权

通俗点说,认证就是身份验证(你是谁?),授权就是访问控制(你可以做什么?)。

认证

Spring Security 支持多种不同的认证方式,这些认证方式有的是 Spring Security 自己提供的认证功能,有的是第三方标准组织制订的。 Spring Security 集成的主流认证机制主要有如下几种:

  • 表单认证。

  • OAuth2.0 认证。

  • SAML2.0 认证。

  • CAS 认证。

  • RememberMe 自动认证。

  • JAAS 认证。

  • OpenID 去中心化认证。

  • Pre-Authentication Scenarios 认证。

  • X509 认证。

  • HTTP Basic 认证。

  • HTTP Digest 认证。

作为一个开放的平台, Spring Security 提供的认证机制不仅仅包括上面这些,我们还可以通过引入第三方依赖来支持更多的认证方式,同时,如果这些认证方式无法满足我们的需求,我们也可以自定义认证逻辑,特别是当我们和一些 “老破旧” 的系统进行集成时,自定义认证逻辑就显得非常重要了。

授权

无论采用了上面哪种认证方式,都不影响在 Spring Security 中使用授权功能。 Spring Security 支持基于 URL 的请求授权、支持方法访问授权、支持 SpEL 访问控制、支持域对象安全(ACL),同时也支持动态权限配置、 支持 RBAC 权限模型等,总之, 我们常见的权限管理需求, Spring Security 基本上都是支持的。

其它

在认证和授权这两个核心功能之外, Spring Security 还提供了很多安全管理的 “周边功能”,这也是一个非常重要的特色。

大部分 Java 工程师都不是专业的 Web 安全工程师,自己开发的安全管理框架可能会存在大大小小的安全漏洞。而 Spring Security 的强大之处在于,即使你不了解很多网络攻击,只要使用了 Spring Security,它会帮助我们自动防御很多网络攻击,例如 CSRF 攻击、会话固定攻击等,同时 Spring Security 还提供了 HTTP 防火墙来拦截大量的非法请求。由此可见,研究 Spring Security,也是研究常见的网络攻击以及防御策略。

对于大部分的 Java 项目而言,无论是从经济性还是安全性来考虑,使用 Spring Security 无疑是最佳方案。