1.讨论两种Redis中Token的分享存储方式
2.10款精选的后台管理系统,收藏吧!源码s源
3.Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的分享Session共享
4.SpringBoot+shiro+redis+jwt实战-01 从零开始认识 Spring Boot
5.后端开发-03Shiro和JWT咱们聊聊
讨论两种Redis中Token的存储方式
摘要:本文讨论存储token时的两种方式,并分析它们在实现需求、源码s源数据传输量及安全性方面的分享表现。问题起源于为公司后台管理系统添加权限管理时,源码s源ios 源码寒战选用开源框架shiro进行权限校验。分享文章分享了存储token时,源码s源以token还是分享用户ID为key的不同方式,探讨了它们在不同场景下的源码s源应用。
问题起源:在实现权限管理时,分享原本系统采用token进行登录校验。源码s源根据shiro验证机制,分享每次接口请求需根据token获取用户ID,源码s源进行权限校验。分享这要求token存储时,以token为键,用户ID为值。
比较两种方式:一种是用户ID为key,另一种是token为key。我们需判断两种方式是否能够满足需求,并分析它们在实现功能、数据传输量及安全性上的差异。
实现需求功能:用户ID为key的方式需要前端传递用户ID和token,通过数据库验证token是否对应正确用户ID;token为key的方式则仅需前端传递token,后台根据token获取用户ID进行验证。
数据传输量分析:用户ID为key的方式要求前端每次请求传递两个值,数据量较大;token为key的方式仅需传递token一个值,数据量较小。
安全性对比:两种方式在安全性上差异不大,关键在于后台如何存储和管理token与用户ID的对应关系。
个人意见:考虑到前端数据传输简洁性及后端统一操作的便利性,个人推荐使用token为key的存储方式。此方式前端只需传递token,简化了数据传输流程,如何篡改网站源码同时便于后台统一获取当前登录用户信息。
款精选的后台管理系统,收藏吧!
此项目是 vue + element-ui 构建的后台管理系统,为后台项目 node-elm 的管理系统。数据实时获取,包含注册、登陆、管理数据、权限验证等功能。
项目地址: github.com/bailicangdu/...
Cloud-Admin是基于Spring Cloud的国内首个微服务化开发平台,提供统一授权、认证后台管理系统,包括用户管理、资源权限管理、网关API管理等模块。使用Spring Boot2.0和Spring Cloud(Finchley.M8),前端采用vue-element-admin组件。
项目地址: github.com/wxiaoqi/Spri...
Guns基于Spring Boot 2,专注于更简洁的后台管理系统。整合了springmvc、shiro、mybatis-plus、beetl,包含个模块如用户管理、角色管理等,作为后台管理系统的脚手架。同时提供Spring Cloud版本。
项目地址: stylefeng/Guns
Cloud-Platform是国内首个基于Spring Cloud的微服务化开发平台,提供统一授权、认证后台管理系统,包括用户管理、资源权限管理、网关API管理等模块。人影粒子软件源码采用Spring Boot 2.1.2和Spring Cloud(Greenwich.RELEASE)以及Nacos注册和配置中心,集成Sentinel。前端使用vue-element-admin组件。
项目地址: gitee.com/minull/ace-se...
react-admin提供了一个用于构建后台管理系统的解决方案,采用React技术。
项目地址: github.com/yezihaohao/r...
hsweb是一个快速搭建企业后台管理系统的基础项目,集成通用增删改查、权限管理、多数据源、动态表单、在线数据库维护等功能。基于Spring Boot、MyBatis。
项目地址: GitHub - hs-web/hsweb-framework: hsweb (haʊs wɛb)
hxyFrame是一款后台管理系统,采用SpringMvc、Spring、Mybatis、Shiro、Redis、Ehcache等技术,实现权限管理、全文搜索引擎、工作流程引擎等功能,包含代码生成器。后期将改造为模块微服务化。
源码地址: gitee.com/soEasyCode/hx...
XMall是一个基于SOA架构的分布式电商购物商城,前后端分离,包含前台商城和后台管理系统。提供完整的商城解决方案。
项目地址: gitee.com/Exrick/xmall
zuihou-admin-cloud是一个基于SpringCloud和SpringBoot的微服务SaaS开发平台,提供统一授权、认证后台管理系统,包括用户管理、资源权限管理、高管交易源码网关API、OpenAPI管理等模块。采用Eureka、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、Redis、RabbitMQ、FastDFS等技术。
项目地址: gitee.com/zuihou/zui...
Vue-Admin基于Vue2、element ui、vue-cli、vuex、vue-router、axios、echarts构建的后台管理系统demo,包含权限管理、用户管理、菜单管理,支持无限级菜单,下拉树形选择框。
Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享
Shiro权限管理框架第二篇深入讲解了如何结合Redis实现分布式环境下的Session共享。在集群环境中,单台服务器已无法满足高并发访问的需求,需要部署集群服务器以分担压力。然而,随着集群服务器的引入,如何在不同服务器间保持用户会话状态成为了一个挑战。
在无状态的HTTP协议下,通过Session和Cookie机制可以实现用户状态的持久化。用户在首次访问服务器时,camera开发源码服务器为其创建Session,并将唯一SessionId存储在Cookie中,以便在后续请求中识别用户。但随着集群环境的使用,同一用户在不同服务器间的Session无法共享,导致用户需要在每个服务器重新登录,这显然无法提供良好的用户体验。
为了解决这个问题,通常有两种方式:一是将用户请求固定到某一台服务器,通过IP算法或其他机制实现负载均衡。二是将所有服务器的Session进行共享,使得任何一台服务器都能访问到其他服务器的Session,确保用户在不同服务器间的连续性。Shiro结合Redis实现分布式Session共享,正是基于后一种策略。
通过继承Shiro的AbstractSessionDAO类,开发者可以轻松实现Session的增删改查操作,结合Redis作为分布式存储,可以高效地实现Session的分布式共享。Shiro框架本身已经封装了大部分流程,开发者只需关注具体的业务实现和配置,从而简化了复杂性。
实现过程包括自定义RedisSessionDAO、注入SessionManager、配置Shiro安全管理器等步骤,确保所有服务器间Session的一致性和可访问性。测试环节验证了分布式Session共享的正确性,确保了用户在不同服务器间登录状态的一致性。
基于Redis实现的Session共享,不仅简化了开发过程,而且提高了系统的扩展性和可用性。Shiro框架的使用,使得在不深入源码的情况下,即可实现强大的功能,这体现了框架设计的优秀性和实用性。然而,对于深入理解框架内部工作原理和机制,以提升开发者的编程能力和系统理解,同样重要。因此,深入Shiro源码的探索,将有助于开发者更全面地掌握这一框架的精髓。
通过Shiro结合Redis实现的分布式Session共享,不仅解决了集群环境下的用户会话一致性问题,还展示了框架设计如何通过抽象和封装,将复杂的系统设计简化为易于理解和使用的API,为开发者提供了高效解决问题的工具。这一过程不仅提高了开发效率,还促进了对框架核心机制的深入理解,为未来的项目开发和维护打下了坚实的基础。
SpringBoot+shiro+redis+jwt实战- 从零开始认识 Spring Boot
搭建 Spring Boot2.x 的运行环境需要完成三个主要步骤:JDK安装、Maven安装及配置、以及Idea安装及配置。
首先,安装JDK。在安装过程中,确保安装目录正确,并将JDK的bin和jre文件夹添加到系统环境变量中。具体操作方法为,在系统环境变量中,新建或修改Path变量,路径格式为:变量值最后输入";%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin"(注意变量值前应有一个点)。另外,需要将JDK的lib目录添加到环境变量中,格式为:变量值填写 ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar"(同样注意变量值前应有一个点)。最后,执行"java -version"命令检查是否成功安装和配置JDK。
其次,安装并配置Maven。下载并安装Maven,安装目录可选择在H:\Program Files\apache-maven-3.3.9。然后将Maven的bin目录添加到系统环境变量中,路径格式为:变量值最后输入";%MAVEN_HOME%\bin"。执行"mvn -version"命令检查Maven是否成功安装。为了缓解C盘压力,需要自定义本地仓库目录,例如设置为F:\mvnrepository。在setting.xml文件中设置镜像,以提高国内访问速度,将远程中央仓库替换为阿里远程仓库。
最后,安装并配置Idea。从官网下载Idea,选择安装位置,如D:\idea\IntelliJ IDEA .2.8。按照提示完成安装过程,生成桌面快捷方式。配置IDEA时,可以导入之前配置或选择不导入。选择默认皮肤、默认插件以及功能插件。如果需要注册,请自行查找注册方法或联系作者。
至此,Spring Boot2.x运行环境搭建完成。通过上述步骤,确保了Java运行环境、Maven管理和IDEA开发环境的稳定运行,为后续使用Spring Boot框架开发项目打下了坚实的基础。
后端开发-Shiro和JWT咱们聊聊
一、什么是Shiro
百度百科上是这么说的:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
通俗的说就是,Shiro是一个认证和授权的框架。
那么怎么理解认证和授权呢?
认证,就是登录呗,通过用户名和密码来验证用户的身份。在Shrio上就是当认证成功后Shrio记录用户成功的凭证。
授权,就是通过限定不同身份的用户拥有不同的行为权限。
理解了什么是认证和授权后,咱们来看看Shiro是怎么做认证和授权的呢。
Shiro利用存储媒介(HttpSession、Redis)存储用户的登陆凭证、角色或者其他身份信息。然后通过过滤器(Filter)对每个HTTP请求进行过滤,检查请求对应的HttpSession或者Redis中的认证与授权信息。如果用户没有登陆,或者权限不够,那么Shiro会向客户端返回错误信息。也就是说,用户登陆成功之后,调用Shiro保存登陆凭证。然后查询用户的角色和权限,让Shiro存储起来。那么接下来不管哪个方法需要登陆访问,又或者拥有特定的角色跟权限才能访问,我们在方法前设置注解即可。
二、什么是JWT
JWT(Json Web Token), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息。
时间回到上古时代,那个时候客户端还都是浏览器。HttpSession是依靠浏览器的Cookie存放SessionId 的。现在呢,手机、物联网设备的出现,让JavaWeb项目必须引入一种脱离Cookie的技术。JWT的token是纯字符串的,这无关客户端设备怎么去保存它。只要客户端发起请求的时候,附带上Token即可。
根据上面所说,如果一个项目需要有不同的权限的角色拥有不同的行为,那么就需要使用Shrio,使用Shrio之前需要用户登录并存储Token,然后在查询该用户所拥有的行为权限,这就需要先做JWT再做Shrio。话不多说,咱们试试。
三、导入依赖
四、创建JWT工具类
五、Token封装
虽然上面咱们能通过算法获取一个token,但是这个token目前还跟Shiro框架半毛钱关系没有。如何让 JWT 和 Shiro 扯上关系呢?在 Apache 的 Shiro 包里有一个AuthenticationToken,当它要 getPrincipal 或者 getCredentials 的时候,我们就把Token值return出去。
六、AuthorizingRealm的实现
文章的一开始讲了在百度百科中的Shiro定义,其实在百度百科中定义的下方还讲了Shiro的主要功能。
三个核心组件:Subject, SecurityManager 和 Realms。
Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
如此,咱们自己写一个Realm的实现
七、Filter过滤请求
八、用ShiroConfig把Filter和Realm装起来
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
在ShiroConfig中我们要返回四个对象,分别是
至此,基本的配置咱们就搞明白了。
未完继续,
没法跟家人聊的知识点又增加了。