一、简介


官方定义

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications

Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements

翻译

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准

Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。像所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求

总结

Spring Security是一个功能强大、可高度定制的身份验证访问控制的框架。或者说用来实现系统中权限管理的框架

历史

Spring Security 最早叫 Acegi Security,这个名称并不是说它和 Spring 没有关系,它依然是为 Spring 框架提供安全支持的。Acegi Security 基于 Spring,可以帮助我们为项目建立丰富的角色与权限管理系统。Acegi Security虽然好用,但是最为人诟病的则是它臃肿烦琐的配置这一问题,最终也遗传给了 Spring Security

Acegi Security 最终被并入Spring Security 项目中,并于2008年4月发布了改名后的第一个版本 Spring Security 2.0.0,到目前为止,Spring Security的最新版本已经到了5.6.1。和 Shiro相比,Spring Security 重量级并且配置烦琐,直至今天,依然有人以此为理由而拒绝了解 Spring Security。其实,自从 SpringBoot 推出后,就彻底颠覆了传统了 JavaEE 开发,自动化配置让许多事情变得非常容易,包括Spring Security 的配置。在一个 SpringBoot 项目中,我们甚至只需要引入一个依赖,不需要任何额外配置,项目的所有接口就会被自动保护起来了。在 SpringCloud 中,很多涉及安全管理的问题,也是一个 Spring Security 依赖两行配置就能搞定,在和 Spring 家族的产品一起使用时,Spring Security的优势就非常明显了。
因此,在微服务时代,我们不需要纠结要不要学习 Spring Security,我们要考虑的是如何快速掌握 Spring Security,并且能够使用SpringSecurity 实现我们微服务的安全管理

认证、权限管理

概念

基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源

权限管理包括用户身份认证授权两部分,简称认证授权。对于需要访问控制的资源,用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问

认证

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一 致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系
统,则需要刷卡

授权

授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的

解决方案

和其他领域不同,在 Java 企业级开发中,安全管理框架非常少,目前比较常见的就是:

  • Shiro
  • Shiro 本身是一个老牌的安全管理框架,有着众多的优点,例如轻量、简单、易于集 成、可以在JavaSE环境中使用等。不过,在微服务时代,Shio就显得力不从心了,在微服务面前和扩展方面,无法充分展示自己的优势
  • 开发者自定义
  • 也有很多公司选择自定义权限,即自己开发权限管理。但是一个系统的交全,不仅仅是登录和权限控制这么简单,我们还要考虑种各样可能存在的网络政击以及防彻策略,从这个角度来说,开发者自己实现安全管理也并非是一件容易的事情,只有大公司才有足够的人力物力去支持这件事情
  • Spring Security
  • SpringSecurity,作为 spring 家族的一员,在和 Spring 家族的其他成员如 SpringBoot、SpringClond 等进行整合时,具有其它框架无可比拟的优势,同时对 OAuth2 有着良好的支持,再加上 SpringCloud 对 SpringSecurity 的不断加持(如推出 SpringCloud 默认用户生成 Security),让 Spring Securiy 不知不觉中成为微服务项目的首选安全管理方案