🏆 一个有梦有戏的人 @怒放吧德德
🌝分享学习心得,欢迎指正,大家一起学习成长!
这篇文章就来说说市面上的安全框架,并没有详细解释。
说说安全框架
什么是安全框架?安全框架又有哪些?
简单来说就是对访问权限进行控制,主要是用户认证和权限鉴权。在安全框架中有这么几位角色。Shiro:是一个很早的框架,是比较轻量级的安全框架,提供许多功能,上手简单。SpringSecurity:这个安全框架搭建起来就比较重,但是最为流行,现如今基本都是使用SpringSecurity作为安全框架,它提供了非常多的过滤器,也方便扩展。Sa-Token:这个安全框架是比较近期的开源框架,是一个容易上手的轻量级框架,只需要使用注解就可以,内置提供了非常多的方法和注解,也是方便扩展。
Shiro
官方地址:https://shiro.apache.org/
Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。
- Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份;
- Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
- Session Management:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;
- Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
- Web Support:Web 支持,可以非常容易的集成到 Web 环境;
- Caching:缓存,比如用户登录后,其用户信息、拥有的角色 / 权限不必每次去查,这样可以提高效率;
- Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
- Testing:提供测试支持;
- Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
- Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
更多可看Shiro - w3school
SpringSecurity
官方地址:https://spring.io/projects/spring-security
Spring 安全性是提供认证、授权和防范常见攻击的框架,是spring整合的安全框架。SpringSecurity上手比较难,整个架构比较复杂,但是提供了许多功能。相比其他安全框架而言,是比较重量级。在SpringSecurity中有两大核心功能,就是认证与授权。Spring安全是一个框架,提供身份验证,授权和针对常见攻击的保护。它是保护基于Spring的应用程序的事实标准。
SpringSecurity 就是通过一些过滤器、拦截器,实现登陆鉴权的流程的。我们可以通过重写这些过滤器以及一些方法从而达到我们自身想要的效果。SpringSecurity有内置登录界面,首先将maven坐标导入后,访问接口就会需要登录认证,而在没自定义登录界面的时候,SpringSecurity会有自带的登录界面,并且在后端控制台中会显示登录密码,当然也可以通过配置去设置好密码,就不用每次都是随机生成。当然,这样的场景远远不够我们的使用,我们需要自己去扩展完成自己想要的功能。
SpringSecurity通过长长的过滤器链完成认证与鉴权,具体看一下一张图片:
此图来自 _江南一点雨 文章地址:Spring Security 工作原理概览 写的非常详细
Sa-Token
官方地址:https://sa-token.dev33.cn/doc/index-backup.html#/
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
Sa-Token是一个近年来出来的开源安全框架,相比Shiro和SpringSecurity来说是一个好用又简单的安全框架,只需要少少的配置就能完成SpringSecurity的相关功能,并且各种继承,方便好用。
可以简单看一下satoken的功能:
- 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录
- 权限认证 —— 权限认证、角色认证、会话二级认证
- Session会话 —— 全端共享Session、单端独享Session、自定义Session
- 踢人下线 —— 根据账号id踢人下线、根据Token值踢人下线
- 账号封禁 —— 指定天数封禁、永久封禁、设定解封时间
- 持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失
- 分布式会话 —— 提供jwt集成、共享数据中心两种分布式会话方案
- 微服务网关鉴权 —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证
- 单点登录 —— 内置三种单点登录模式:无论是否跨域、是否共享Redis,都可以搞定
- OAuth2.0认证 —— 轻松搭建 OAuth2.0 服务,支持openid模式
- 二级认证 —— 在已登录的基础上再次认证,保证安全性
- Basic认证 —— 一行代码接入 Http Basic 认证
- 独立Redis —— 将权限缓存与业务缓存分离
- 临时Token验证 —— 解决短时间的Token授权问题
- 模拟他人账号 —— 实时操作任意用户状态数据
- 临时身份切换 —— 将会话身份临时切换为其它账号
- 前后台分离 —— APP、小程序等不支持Cookie的终端
- 同端互斥登录 —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录
- 多账号认证体系 —— 比如一个商城项目的user表和admin表分开鉴权
- 花式token生成 —— 内置六种Token风格,还可:自定义Token生成策略、自定义Token前缀
- 注解式鉴权 —— 优雅的将鉴权与业务代码分离
- 路由拦截式鉴权 —— 根据路由拦截鉴权,可适配restful模式
- 自动续签 —— 提供两种Token过期策略,灵活搭配使用,还可自动续签
- 会话治理 —— 提供方便灵活的会话查询接口
- 记住我模式 —— 适配[记住我]模式,重启浏览器免验证
- 密码加密 —— 提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密
- 全局侦听器 —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作
- 开箱即用 —— 提供SpringMVC、WebFlux等常见web框架starter集成包,真正的开箱即用
看一下satoken的功能结构图
认证流程与SpringSecurity大同小异
Satoken封装了许多的api,只需要调用api就能够完成认证登录,通过拦截器进行权限验证,对于权限校验也可以使用注解方式,比较方便。权限判断通过实现StpInterface类并注入spring管理,实现其getPermissionList和getRoleList方法就能够得到权限。还有更多功能可以观看官方文档。
👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得点赞哦!👍
今天就只是做个整体简单的分享,后续与大家共同学习!不断地在改变,不断地在学习,只为用心写好文章,奋力学习!