![](https://cdn.zimug.com/wx-zimug.png)
[TOC]
## 一、 SpringSecurity 框架简介
官网:https://projects.spring.io/spring-security/
源代码: [https://github.com/spring-projects/spring-security/](https://github.com/spring-projects/spring-security/)
Spring Security 是强大的,且容易定制的,基于Spring开发的实现认证登录与资源授权的应用安全框架。
**SpringSecurity 的核心功能:**
* Authentication:身份认证,用户登陆的验证(解决你是谁的问题)
* Authorization:访问授权,授权系统资源的访问权限(解决你能干什么的问题)
* 安全防护,防止跨站请求,session 攻击等
## 二、比较一下shiro与Spring Security
目前在java web应用安全框架中,与Spring Security形成直接竞争的就是shiro,二者在核心功能上几乎差不多,但从使用的角度各有优缺点。笔者认为:没有最好的,只有最合适的。
### 2.1 用户量
Shiro的使用量一直高于spring security。但是从趋势上来看(2020年10月的百度指数),Spring Security是在一直上升的,shiro的使用量同比、环比都进入了下滑期。
![](https://img.kancloud.cn/dc/77/dc776fae885b20e103440c0de9e70149_1268x644.png)
### 2.2.使用的方便程度
通常来说,shiro入门更加容易,使用起来也非常简单,这也是造成shiro的使用量一直高于Spring Security的主要原因。但是从笔者的角度来看,二者其实都简单,我说说我的理由:
* 在没有Spring Boot之前,Spring Security的大部分配置要通过XML实现,配置还是还是非常复杂的。但是有了 Spring Boot之后,这一情况已经得到显著改善。
* Spring Security之所以看上去比shiro更复杂,其实是因为它引入了一些不常用的概念与规则。大家应该都知道2/8法则,这在Spring Security里面体现的特别明显,如果你只学Spring Security最重要的那20%,这20%的复杂度和shiro基本是一致的。也就是说,不重要的那80%,恰恰是Spring Security比shiro的“复杂度”。
也就是说,如果有人能帮你把Spring Security最重要的那20%摘出来,二者的入门门槛、复杂度其实是差不太多的。
### 2.3.社区支持
Spring Security依托于Spring庞大的社区支持,这点自不必多说。shiro属于apache社区,因为它的广泛使用,文档也非常的全面。二者从社区支持来看,几乎不相上下。
但是从社区发展的角度看,Spring Security明显更占优势,随着Spring Cloud、Spring Boot、Spring Social的长足进步,这种优势会越来越大。因为Spring Security毕竟是Spring的亲儿子,Spring Security未来在于Spring系列框架集成的时候一定会有更好的融合性,前瞻性、兼容性!这也是为什么我们要学Spring Security的主要原因!
### 2.4.功能丰富性
Spring Security因为它的复杂,所以从功能的丰富性的角度更胜一筹。其中比较典型的如:
* Spring Security默认含有对OAuth2.0的支持,与Spring Social一起使用完成社交媒体登录也比较方便。shiro在这方面只能靠自己写代码实现。
* 还有一种普遍说法:Spring Security在网络安全的方面下的功夫更多,但是笔者并未有非常直接的感受,有可能出现安全问题的时候才会感到不够安全的痛。
## 三、总结
如果你只是想实现一个简单的web应用,shiro更加的轻量级,学习成本也更低。如果您正在开发一个分布式的、微服务的、或者与Spring Cloud系列框架深度集成的项目,笔者还是建议您使用Spring Security。
- 课程内容介绍
- 源码与技术交流
- 作者其他作品推荐
- vue深入浅出系列
- 手摸手教你学Spring Boot
- 实战前后端分离RBAC权限管理系统
- 实战SpringCloud微服务从青铜到王者
- 第一章 spring security基础篇
- 1.1.spring-security简介并与shiro对比
- 1.2.需求分析与基础环境准备
- 1.3.HttpBasic模式登录认证
- 1.4.PasswordEncoder介绍
- 1.5.formLogin模式登录认证
- 1.6.源码解析登录验证流程
- 1.7.自定义登录验证结果处理
- 1.8.session会话的管理
- 1.9.同账号多端登录踢下线
- 第二章 认证授权鉴权功能深入
- 2.1.1.RBAC权限管理模型
- 2.1.2.结合真实系统讲解RBAC实现
- 2.2.动态加载用户角色权限数据
- 2.3.动态加载资源鉴权规则
- 2.4.权限表达式使用方法总结
- 2.5.RememberMe记住我功能
- 2.6.退出登录功能的实现
- 2.7.多次登录失败账户锁定
- 2.8.多种图片验证码实现方案
- 2.9.基于session的图片验证码实现
- 2.10.短信验证码登录功能
- 第三章 集群单点登录方案介绍
- 3.1.单点登录与状态共享方案
- 3.2.基于session共享登陆方案
- 3.3.CAS认证服务器搭建
- 3.4.CAS动态加载用户密码数据
- 3.5.CAS资源服务器搭建
- 第四章 前后端分离的应用认证
- 4.1.详述JWT使用场景及结构安全
- 4.2.Spring Security-JWT实现原理
- 4.3.编码实现JWT认证鉴权
- 4.4.解决跨域访问的问题
- 4.5.CSRF跨站攻击防护
- 4.6.JWT集群应用方案
- 第五章 Spring-Security-OAuth2项目
- 5.1.OAuth2授权标准简介
- 5.2.Spring与OAuth2发展路线图
- 5.3.实现授权码模式认证服务器
- 5.4.实现其它三种模式认证服务器
- 5.5.AccessToken令牌的刷新
- 5.6.编码实现资源服务器
- 5.7.认证资源服务器分离
- 5.8.认证资源服务整合JWT
- 5.9.Client信息持久化存储
- 第六章 SpringSocial社交登录
- 6.1.SpringSocia源码分析
- 6.2.QQ互联注册及应用创建
- 6.3.实现QQ登录功能
- 6.4.QQ登录功能细节处理
- 6.5.QQ登录用户关系绑定
- 附录一:抽取公共资源为独立模块
- 附录二:OAuth-server数据库表