前言
之前一直说开一个SpringSecurity的专栏,今天抽空整理一下,准备开始更新。
也欢迎大家订阅此专栏!
什么是SpringSecurity?
Spring是非常成功的Java应用框架,目前是非常主流的开发框架。Spring Securtiy正是我们Spring家族的一员。它基于Spring框架,为我们提供了关于Web应用安全性的一套完整的解决方案
一般而言,Web应用的安全性包括了用户认证(Authentication)以及用户授权(Authorization)这么两个部分,这也正是我们今天所讲解的Spring Security的两大核心功能。
1、用户认证:指的是验证某个用户是否是我们系统中的合法用户,即用户能否对心痛进行访问。认证的前提条件就是用户提供用户名以及密码。通过我们系统来完成对其提供用户名和密码的校验,是否通过。也就是我们常说的系统登录功能中的校验。
2、用户授权:指的是用户是否有权限进行访问和操作。在我们的系统中,往往不同的用户有着不同的权限。比如对于菜单的操作,有的用户可以读取,有的用户可以进行新增。这种不同的权限就是我们所说的授权。通常,系统会给用户分配相对应的角色,然后再通过角色的权限来给用户赋能。也就是我们系统中去判定用户是否有权限去访问或者操作系统。
SpringSecurity的发展史
Spring Security开始于2003年年底,““spring的acegi安全系统”。 起因是Spring开发者邮件列表中的一个问题,有人提问是否考虑提供一个基于spring的安全实现。
在当时Spring的社区相对较小(是和今天的规模比!),其实Spring本身是从2003年初才作为一个sourceforge的项目出现的。 对这个问题的回应是,这的确是一个值得研究的领域,虽然限于时间问题阻碍了对它的继续研究。 有鉴于此,一个简单的安全实现建立起来了,但没有发布。 几周之后,spring社区的其他成员询问安全问题,代码就被提供给了他们。
随后又有人请求,在2004年一月左右,有20万人在使用这些代码。 另外一些人加入到这些先行者中来,并建议在sourceforge上建立一个项目,项目在2004年3月正式建立起来。
在早期,项目本身没有自己的认证模块。 认证过程都是依赖容器管理安全的,而acegi则注重授权。 这在一开始是合适的,但随着越来越多用户要求提供额外的容器支持,基于容器认证的限制就显现出来了。
还有一个有关的问题,向容器的classpath中添加新jar,常常让最终用户感到困惑,又容易出现配置错误。 随后acegi加入了认证服务。大约一年后,acegi成为spring的官方子项目。 经过了两年半在许多生产软件项目中的活跃使用和数以万计的改善和社区的贡献,1.0.0最终版本发布于2006年5月。 acegi在2007年年底,正式成为spring组合项目,被更名为“Spring Security”。
同类产品对比
下面分别从各自的特点说明一下Shiro和SpringSecurity
SpringSecurity | Shiro |
---|---|
1、Spring技术栈的加持 2、和Spring完美的无缝整合 旧版本不能脱离Web环境而使用 新版本对整体框架进行分层抽取,形成了核心模块和web模块,引入核心模块就能够完5全脱离Web环境单独使用 5重量级框架 | 1、Apache下的轻量权限控制框架 2、理念是把复杂的事情变得简单,对性能有更高的要求的互联网应用比较友好 3、通用性比较好 不局限于Web环境,可以脱离Web使用 在Web环境下一些特定的需求是需要我们定制代码的开发 |
总结
Spring Security 是 Spring 家族中的一个安全管理框架,其实,在 Spring Boot 出现之 前,Spring Security 它已经发展了多年了,但是使用的并不多,安全管理框架这个领域,一直 是 Shiro 的天下。
相对于 Shiro,在 SSM 中整合 Spring Security 都是比较繁琐,所以,Spring Security 虽然功能比 Shiro 强大,但是使用的反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。
自从 Spring Boot 出现之后,Spring Boot 对于 Spring Security 提供了自动化配置的 案,可以使用更少的配置来使用我们的Spring Security框架。
因此,目前,常见的安全管理技术栈的组合是这样的:
• SSM + Shiro
• Spring Boot/Spring Cloud + Spring Security
以上只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的。
模块划分
前置知识
1、掌握Spring框架
2、掌握SpringBoot的基本使用
3、掌握JavaWeb的相关技术(比如过滤器)
好了,关于SpringSecurity之基础认知就先到这里。
欢迎大家点击下方卡片,关注《coder练习生》