随着Spring Boot 和微服务的流行,Spring Security越来越受开发者的重视,因为Spring Security在和Spring Boot整合时具有先天优势。
目前在Java企业级开发中,安全管理方面的框架非常少,一般来说,主要有三种方案:
- Shiro
- Spring Security
- 开发者自己实现
Shiro本身是一个老牌的安全管理框架,有着众多的优点,比如轻量、简单、基于集成、可以在JavaSE环境中使用等。不过在微服务时代,Shiro就显得力不从心了,在微服务面前,它无法充分展示自己的优势。
对于一个安全管理框架而言,无论是Shiro还是Spring Security,最核心的功能,无非就是如下两反面:
- 认证
- 授权
通俗点说,认证就是身份证(你是谁?)授权就是访问控制(你可以做什么?)。
认证
Spring Security支持多种不同的认证方式,Spring Security主流的认证机制主要如下几种:
- 表单认证
- OAuth2.0认证
- SAML2.0认证
- CAS认证
- RememberMe自动认证
- JAAS认证
- OpenID去中心化认证
- Pre-Authentication Scennarios认证
- X509认证
- HTTP Basic认证
- HTTP Digest认证
作为一个开放的平台,Spring Security提供的认证机制不仅仅包括上面这些,我们还可以引入第三方依赖来支持更多的认证方式,如果这些认证方式无法满足我们的需求,我们也可以自定义认证逻辑。
授权
无论采用了上面的哪种认证方式,都不影响在Spring Security中使用授权功能。Spring Security支持基于URL的请求授权、支持方法访问授权、支持SpEL访问控制、支持域对象安全(ACL),同时也支持动态权限配置、支持RBAC权限模型等,总之,我们常见的授权管理需求,Spring Security 基本上都是支持的。
其他
在认证和授权两个核心功能之外,Spring Security还提供了很多安全管理的“周边功能”,这也是一个非常重要的特色。
Spring Security 的强大之处在于,即使你不了解很多网络攻击,只要使用了Spring Security,它会帮助我们自动防御很多网络攻击,例如CSRF攻击、会话固定攻击等,同时Spring Security还提供了HTTP防火墙拦截大量的非法请求。