自从 Spring Boot、Spring Cloud 火起来之后,Spring Security 也跟着沾了一把光!
Spring Security 是一个比 Shiro 优秀很多的权限管理框架,但是重量级、配置繁琐、门槛高这些问题一直困扰着 Spring Security 的开发者,也让很多初学者望而却步。直到 Spring Boot 横空出世,这些问题统统都得到缓解。
在 Spring Boot 或者 Spring Cloud 中,如果想选择一个权限管理框架,几乎毫无疑问的选择 Spring Security,Shiro 在这个环境下已经不具备优势了。
Spring Security 介绍
Java 领域老牌的权限管理框架当属 Shiro 了。
Shiro 有着众多的优点,例如轻量、简单、易于集成等。
当然 Shiro 也有不足,例如对 OAuth2 支持不够,在 Spring Boot 面前无法充分展示自己的优势等等,特别是随着现在 Spring Boot 和 Spring Cloud 的流行,Spring Security 正在走向舞台舞台中央。
陈年旧事
Spring Security 最早不叫 Spring Security ,叫 Acegi Security,叫 Acegi Security 并不是说它和 Spring 就没有关系了,它依然是为 Spring 框架提供安全支持的。事实上,Java 领域的框架,很少有框架能够脱离 Spring 框架独立存在。
Acegi Security 基于 Spring,可以帮助我们为项目建立丰富的角色与权限管理,但是最广为人诟病的则是它臃肿繁琐的配置,这一问题最终也遗传给了 Spring Security。
在 Acegi Security 时代,网上流传一句话:“每当有人要使用 Acegi Security,就会有一个精灵死去。”足见 Acegi Security 的配置是多么可怕。
当 Acegi Security 投入 Spring 怀抱之后,先把这个名字改了,这就是大家所见到的 Spring Security 了,然后配置也得到了极大的简化。
但是和 Shiro 相比,人们对 Spring Security 的评价依然中重量级、配置繁琐。
直到有一天 Spring Boot 像谜一般出现在江湖边缘,彻底颠覆了 JavaEE 的世界。一人得道鸡犬升天,Spring Security 也因此飞上枝头变凤凰。
到现在,要不要学习 Spring Security 已经不是问题了,无论是 Spring Boot 还是 Spring Cloud,你都有足够多的机会接触到 Spring Security,现在的问题是如何快速掌握 Spring Security?
核心功能
对于一个权限管理框架而言,无论是 Shiro 还是 Spring Security,最最核心的功能,无非就是两方面:
认证
授权
通俗点说,认证就是我们常说的登录,授权就是权限鉴别,看看请求是否具备相应的权限。
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 提供的认证机制不仅仅是上面这些。如果上面这些认证机制依然无法满足你的需求,我们也可以自己定制认证逻辑。当我们需要和一些“老破旧”的系统进行集成时,自定义认证逻辑就显得非常重要了。
除了认证,剩下的就是授权了。Spring Security 支持基于 URL 的请求授权、支持方法访问授权以及对象访问授权。
Spring Security 系列
- Spring Security:初体验
- Spring Security:表单登录
- Spring Security:前后端分离登录
- Spring Security:授权
- Spring Security:用户数据存入数据库
- Spring Security:整合Spring Data Jpa
- Spring Security:自动登录
- Spring Security:自动登录(降低安全风险)
- Spring Security:比较Shiro
- Spring Security:添加登录验证码