1. 写在前面
Java 领域老牌的权限管理框架当属 Shiro 了,Shiro 有着众多的优点,例如:轻量、简单、易于集成等。当然 Shiro 也有不足,例如对 OAuth2 支持不够,在 Spring Boot 面前无法充分展示自己的优势等等。
自从 Spring Boot、Spring Cloud 火起来之后,Spring Security 正在走向舞台的中央。
其实我一直觉得 Spring Security 是一个比 Shiro 优秀很多的权限管理框架,但是重量级、配置繁琐、门槛高这些问题一直困扰着 Spring Security 的开发者,也让很多初学者望而却步。直到 Spring Boot 横空出世,这些问题统统都得到缓解。
在 Spring Boot 或者 Spring Cloud 中,如果想选择一个权限管理框架,几乎毫无疑问的选择 Spring Security,Shiro 在这个环境下已经不具备优势了。
2. Spring Security 概述
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标准。
Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。像所有Spring项目一样,Spring Security的真正强大之处在于它可以轻松扩展以满足定制需求的能力。
特征:
- 对身份验证和授权的全面且可扩展的支持
- 保护免受会话固定,点击劫持,跨站点请求伪造等攻击
- Servlet API集成
- 与Spring Web MVC的可选集成
- Much more…
3. 核心功能
对于一个安全框架而言,无论是 shiro 还是 Spring Security 最最核心功能无非就两方面:
- 认证 (你是谁)
- 授权 (你能干什么)
通俗点说,认证就是我们常说的登录,授权就是权限鉴别,看看请求是否具备相应的权限。
3.1 认证
虽然就是一个简简单单的登录,可是也能玩出很多花样来。
Spring Security 支持多种不同的认证方式,这些认证方式有的是 Spring Security 自己提供的认证功能,有的是第三方标准组织制订的,主要有如下一些:
一些比较常见的认证方式:
- HTTP BASIC authentication headers:基于IETF RFC 标准。
- HTTP Digest authentication headers:基于IETF RFC 标准。
- HTTP X.509 client certificate exchange:基于IETF RFC 标准。
- LDAP:跨平台身份验证。
- Form-based authentication:基于表单的身份验证。
- Run-as authentication:用户用户临时以某一个身份登录。
- OpenID authentication:去中心化认证。
除了这些常见的认证方式之外,一些比较冷门的认证方式,Spring Security 也提供了支持:
- Jasig Central Authentication Service:单点登录。
- Automatic “remember-me” authentication:记住我登录(允许一些非敏感操作)。
- Anonymous authentication:匿名登录。
作为一个开放的平台,Spring Security 提供的认证机制不仅仅是上面这些。如果上面这些认证机制依然无法满足你的需求,我们也可以自己定制认证逻辑。当我们需要和一些“老破旧”的系统进行集成时,自定义认证逻辑就显得非常重要了。
3.2 授权
除了认证,剩下的就是授权了。
Spring Security 支持基于 URL 的请求授权、支持方法访问授权以及对象访问授权。
4. 怎么学
安全这一块从来都有说不完的话题,一个简单的注册登录很好做,但是你要是考虑到各种各样的攻击,XSS、CSRF 等等,一个简单的注册登录也能做的很复杂。
幸运的是,即使你对各种攻击不太熟悉,只要你用了 Spring Security,就能自动避免掉很多攻击了,因为 Spring Security 已经自动帮我们完成很多防护了。
从这个角度讲,我们学习 Spring Security,不仅仅是学习 Spring Security 的各种用法,也是去了解去熟悉各种网络攻击。
为了大家不仅能学会Spring Security,还能让大家可以确切的感受到 Spring Security 的魅力,我这里将基于Spring Boot + Vue.js 来进行后续的文章。