Spring Security架构概览

Spring Security虽然历史悠久,但是从来没有像今天这样收到开发者这多多的关注。究其原因还是因为分布式架构的盛行。作为Spring家族中的一员,在和Spring家族中的其它产品如SpringSpring BootSpring Cloud等进行整合是,Spring Security拥有众多同类型框架无可比拟的优势。


1.Spring Security简介

Java企业级开发生态丰富,无论想做哪方面的功能,都有众多的框架和工具可供选择,以至于SUN公司在早年不得不制定了很多开发规范,这些规范在今天依然影响着开发者,安全领域也是如此。不同于其它领域的是,在Java企业级开发中,安全管理方面的框架非常少,一般来说主要有三种方案:

  • Shiro
  • Spring Security
  • 开发者自己实现

Shiro本身是一个老牌的安全管理框架,有着众多的优点,例如轻量级、简单、易于集成、可以在Java SE环境中使用等。不过,在当今分布式架构盛行的时代,Shiro要适应微服务这种模式就显得有点力不从心了,在微服务面前,Shiro也无法充分展现自己的优势。

也有开发者选择自己实现安全管理,这一部分人不在少数。但是一个系统的安全,不仅仅局限于登录权限控制,还需要考虑到各种各样可能存在的网络攻击以及防御策略。从安全角度出发,开发者自己实现安全管理也并非一件容易的事情,只有大公司才有足够的人力、物力去支持这件事情。

Spring Security作为Spring家族的一员,在和Spring家族的其它成员如SpringSpring BootSpring Cloud等进行整合时,具有其它框架无可比拟的优势,同时对OAuth2有着良好的支持,再加上Spring CloudSpring Security的不断加持,如退出Spring Cloud Security,让Spring Security不知不觉中成为微服务项目的首选安全管理方案。

陈年旧事

Spring Security最早叫Acegi Security,这个名称并不代表它和Spring没有关系,它依然是为Spring家族成员提供安全支持。Acegi Security基于Spring,可以帮助Spring构建的项目建立丰富的角色与权限管理系统。Acegi Security虽然强大,但是最为开发者诟病的则是它臃肿繁琐的配置,这一问题最终也遗传给了Spring Security

Scegi Security最终被并入Spring Security项目中,并于20084月发布了合并后的第一个版本Spring Security 2.0.0。目前Spring Security的最新版本以及到了5.7.1

Shiro相比,Spring Security重量级并且配置繁琐。直至今天,依然有很多开发者以此为理由而拒绝了解Spring Security。其实,自从Spring Boot框架推出后,就彻底颠覆了传统的Java EE开发,Spring Boot的自动装配让很多事情都变得非常容易,包括Spring Security的配置。在Spring Boot项目中,开发者只需要引入一个依赖,不需要任何额外的配置,项目中所有接口就会被自动保护起来。在Spring Cloud中,很多涉及安全管理的问题,也就是一个Spring Security依赖两行配置就能轻松搞定,在和Spring家族的产品一起使用时,Spring Security的优势就非常明显了。