微服务概述-7
Shiro 框架
Shiro 是一个用于 Java 应用程序的安全框架。它提供了身份验证、授权、加密和会话管理等功能,可以帮助开发人员构建安全可靠的应用程序。
Java 中针对权限管理常见的有 2 个著名的框架:spring security 和 shiro
shiro 基本概念
-
credentials 资格证书
-
Principal 当事人
-
Authentication 认证
-
Authorization 授权
Shiro 工作原理
Shiro 的工作原理主要包括身份验证和授权两个方面。
在身份验证方面,Shiro 提供了一种简单的方式来验证用户的身份。它可以通过用户名和密码、轻量目录访问协议 LDAP、OAuth 等多种方式进行身份验证。当用户提供身份凭证后,Shiro 会验证凭证的有效性,并返回验证结果。
在授权方面,Shiro 提供了一种灵活的授权机制。开发人员可以定义角色和权限,并将其与用户关联起来。当用户尝试进行某个操作时,Shiro 会根据用户的角色和权限来判断是否允许该操作。
Shiro 还提供了会话管理功能,可以跟踪和管理用户的会话状态。它支持将会话信息存储在内存、数据库或其他存储介质中,并提供了一些常见的会话管理操作,如创建、销毁、过期等。
总的来说,Shiro 的工作原理是通过身份验证来确认用户的身份,并通过授权机制来管理用户的角色和权限,从而确保应用程序的安全性和可靠性。
身份认证是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件 Key 等刷卡系统,则需要刷卡。
授权就是访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的
shiro 运行时异常
AuthenticationException 异常是 Shiro 在登录认证过程中,认证失败需要抛出的异常
CredentitalsException 凭证异常
IncorrectCredentialsException 不正确的凭证
ExpiredCredentialsException 凭证过期
AccountException 账号异常
ConcurrentAccessException 并发访问异常(多个用户同时登录时抛出)
UnknownAccountException 未知的账号
ExcessiveAttemptsException 认证次数超过限制
DisabledAccountException 禁用的账号
LockedAccountException 账号被锁定
pportedTokenException 使用了不支持的 Token
AuthorizationException 鉴权操作异常
UnauthorizedException: 抛出以指示请求的操作或对请求的资源的访问是不允许的
UnanthenticatedException:当尚未完成成功认证时,尝试执行授权操作时引发异常
shiro 核心组件
-
Authentication 身份认证/登录,验证用户是不是拥有相应的身份。
-
Authorization 授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。
-
SessionManagement 对用户的会话信息进行管理,使 Session 不再仅限于 JavaEE 应用,同时扩展了 Session数据的存储途径及缓存方式,更易于实现 Session 数据的集群共享
-
Cryptography 加密,保护数据的安全性,以简洁的 API 提供常用的加密算法和数据摘要算法。
shiro 选用:
1、使用 shiro 可以非常快速的完成认证、授权等功能的开发,降低系统成本
2、较之 SpringSecurity,Shiro 在保持强大功能的同时,在简单性和灵活性方面拥有较为明显的优势
Kaptcha
Kaptcha 是一个用于生成和验证验证码的 Java 库,提供了丰富的生成和验证功能,并支持自定义配置。它可以用于增加应用程序的安全性,防止机器人和恶意攻击。
Kaptcha 可以生成各种类型的验证码,包括数字、字母、数字字母组合等。生成的验证码图片可以以图片流或Base64 编码的形式输出,方便在 Web 应用程序中使用。
在验证码验证方面,Kaptcha 提供了验证器接口,可以用于验证用户输入的验证码是否正确。开发人员可以根据需要自定义验证逻辑,以满足特定的业务需求。
Cookie 的使用
Cookie 是一种在 Web 开发中使用客户端数据存储实现跟踪用户状态的机制。所谓的跟踪用户是指记录用户操作信息并隔离不同用户数据访问的方法,常见的用户跟踪方法有隐藏域、URL 重写、客户端跟踪用户 Cookie
和服务器端跟踪用户 Session 四种不同方式。
理论上来说关于 cookie 的大小实际上没有明确的限制。Cookie 是由网站在用户浏览器中存储的小型文本文件,用于跟踪用户的活动和提供个性化的服务。然而浏览器对于每个域名和每个 cookie 的大小都有一些限制。大多数现代浏览器对于单个 cookie 的大小限制在 4KB 到 10KB 之间,例如 chrome 的限制就是 4KB。同时每个域名在浏览器中可以存储的 cookie 数量也有一定限制,一般在几十到几百个之间。
需要注意的是,这些限制可能因不同的浏览器和版本而有所不同。此外虽然 cookie 的大小限制较小,但网站可以通过将数据存储在服务器上,并在 cookie 中使用标识符来处理更大量的数据。 总的来说,虽然 cookie的大小有一定限制,但对于大多数常见的用途和数据跟踪来说,这些限制通常是足够的。如果有特定的需求,可能需要考虑其他的数据存储方式。
setMaxAge(int expiry) 正值表示 cookie 将在经过该值表示的秒数后过期,负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除,默认是-1,0 值表示马上删除 cookie。
setPath(String)指定路径下的请求才会传递该 cookie 数据Cookie 中的中文乱码可以使用 URLDecoder.decode(value,“UTF-8”)解决
Session 的使用
Session 是一种在 Web 开发中用于跟踪用户状态的机制。它通过在服务器上存储用户数据,并为每个用户分配一个唯一的标识符来实现。 在使用 Session 时,服务器会为每个用户创建一个唯一的 Session ID,并将该 ID
存储在用户的浏览器中的 Cookie 中。当用户发送请求时,服务器会根据 Session ID 来检索和存储与该用户相关的数据。这使得服务器能够跟踪用户的状态和信息,例如登录状态、购物车内容等。Session 的使用有四方面需要注意:
- 安全性:由于 Session ID 存储在用户的 Cookie 中,需要采取适当的安全措施来保护 Session 数据。这包括
使用加密传输、限制 Session ID 的有效期等。
- 存储容量:Session 数据存储在服务器上,因此需要考虑服务器的存储容量和性能。过多或过大的 Session数据可能会对服务器造成压力。
- 生命周期:Session 可以有不同的生命周期设置,例如在用户关闭浏览器后立即过期,或者在一定时间段内保持活动状态。开发人员需要根据应用需求来配置 Session 的生命周期。
- 分布式环境:在分布式环境中,需要确保 Session 数据在不同服务器之间的共享和同步,以便用户在不同服务器间切换时能够保持会话状态。
server.servlet.session.timeout=30m 表示 Session 将在 30 分钟后超时
SpringSession
在传统单机 web 应用中,用户的 session 都是由容器管理。浏览器使用 cookie 中记录 sessionId,容器根据sessionId 判断用户是否存在会话 session。限制是 session 存储在 web 容器中,被单台服务器容器管理。如果需要实现 session 共享的方式有 5 种:1、通过 nginx 的 ip_hash 负载均衡策略根据 ip 将请求分配到对应的服务器。2、基于关系型数据库存储共享数据。3、基于 cookie 客户端数据存储。4、某些服务器内置的有 session
复制域功能。5、可以基于 NoSQL 数据库系统实现
Spring Session 是一个用于在分布式环境中管理和跟踪用户会话的框架。它提供了多种用户会话存储的实现方式,支持会话共享和跨域请求,具有良好的扩展性和自定义能力。主要是依赖于 SessionRepositoryFilter 实现,它就是Servlet 规范中 Filter 的实现,用来切换HttpSession 至Spring Session,重新定义包装 HttpServletRequest和 HttpServletResponse
使用 Spring Session 功能
-
创建和管理会话:Spring Session 可以创建和管理用户会话。它提供了 API 来创建新会话、获取当前会话、设置会话属性等。
-
共享会话数据:在分布式环境中,Spring Session 可以将会话数据存储在共享的存储介质中,以便不同的服务器可以访问和共享相同的会话数据。
-
跨域请求支持:Spring Session 提供了跨域请求支持,使得在多个域名或子域名下共享会话变得更加容易。
-
扩展性和自定义:Spring Session 具有良好的扩展性,可以根据需要自定义会话存储、会话管理和会话策略等。
相关文章:
微服务概述-7
Shiro 框架 Shiro 是一个用于 Java 应用程序的安全框架。它提供了身份验证、授权、加密和会话管理等功能,可以帮助开发人员构建安全可靠的应用程序。 Java 中针对权限管理常见的有 2 个著名的框架:spring security 和 shiro shiro 基本概念 credentia…...
十二、Linux如何修改文件/文件夹所属用户or用户组?chown命令
目录 1、基础语法 2、修改目标用户: 3、修改用户组: 4、使用-R命令,并同时修改用户/用户组 1、基础语法 chown [-R] [目标用户][:][目标用户组] 被修改文件/文件夹 (1)选项-R:同chmod,对文…...
企业百家号蓝V认证后,百度营销基木鱼落地页如何嵌入百家号中
首先搭建百度营销基木鱼落地页 在我们的百度营销后台,点击基木鱼跳转至百度营销基木鱼页面,在我的站点位置,可以创建H5站点,PC站点等,创建完成后可以点击复制基木鱼落地页的链接。 注意事项 1、企业百家号需要进行…...
Redis缓存读写策略(三种)数据结构(5+3)
Redis缓存读写策略(三种) Cache Aside Pattern(旁路缓存模式) Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。 写: 先更新 db然后直接删除 cache 。 读 : …...
计算机竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 Yolov安全帽佩戴检测 危险区域进入检测 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&am…...
使用python向窗口发送鼠标点击命令
今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断:一段时间没有鼠标活动,视频就会暂停。于是就想,能否隔一段时间就模拟鼠标点击一下视频暂停,再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台…...
C++11并发与多线程笔记(6) unique_lock(类模板)
C11并发与多线程笔记(6) unique_lock(类模板) 1、unique_lock取代lock_guard2、unique_lock的第二个参数2.1 std::adopt_lock:2.2 std::try_to_lock:2.3 std::defer_lock: 3、unique_lock的成员…...
计算机网络——OSI与TCP/IP各层的结构与功能,都有哪些协议?
文章目录 一 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1 应用层1.2 运输层1.3 网络层1.4 数据链路层1.5 物理层1.6 总结一下 二 ⭐TCP 三次握手和四次挥手(面试常客)2.1 TCP 三次握手漫画图解2.2 为什么要三次握手⭐2.3 第2次握手传回了ACK,为什么还要传回SYN&…...
Win7 x86 家庭版SP1 配置 Python 开发环境
1 Win7 下载地址 来源于 MSDN, 我告诉你 - 做一个安静的工具站 ed2k://|file|cn_windows_7_home_basic_with_sp1_x86_dvd_u_676500.iso|2653276160|843E7A78F2126FAC726CF5342710082D|/ 2 Python 版本选择 Python 3.7.9 Python Release Python 3.7.9 | Python.org 3 Pychar…...
从零玩转系列之微信支付实战PC端装修我的订单页面 | 技术创作特训营第一期
一、前言 欢迎来到本期的博客!本篇文章是 PC 端的结尾了,前面经历过九个章节到本章节刚刚好十章节感谢观看我的文章,那么接下来我们将要编写的是我的订单页面. GGBOM! 本篇完毕后将是 UniApp 的篇章感受移动端的诱惑 💗 本次为前端知识点如果不懂前段可以…...
ChatGPT和Claude的能力全测评
创造性思维/语言 提示:“写一首 4 行诗,每行只有 3 个词,描写重庆” ChatGPT写诗👇 Claude写诗👇 仁者见仁,您怎么看谁更强? 提示: "如果你随机选择这个问题的答案,…...
ffmpeg简介
1.什么是ffmpeg ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议…...
AI绘画 stable diffusion Midjourney 官方GPT文档 AIGC百科全书资料收集
教学AI绘画 AIGC工具 SD教程 ###Redis面试题 单机Redis的qps大概是多少? 项目中用到了哪些Redis的数据类型?为什么这么用? Redis的key到了过期时间就被删除了吗?简述下Redis的过期策略? Redis有哪几种内存淘汰策略…...
Lombok注解大全
一、安装插件,eclipse 对于 lombok 的支持 二、引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version> <!-- Spring Boot 项目此部分可以不写 --&g…...
STM32--ADC模数转换
文章目录 ADC简介逐次逼近型ADCADC框图转换模式数据对齐转换时间校准ADC基本结构ADC单通道工程代码: ADC简介 STM32的ADC(Analog-Digital Converter)模拟-数字转换器,是一种逐次逼近型模拟数字转换器,可以将引脚上连续…...
陕西科技大学改考408!附考情分析
改考信息 8月14日,陕西科技大学公布了2024年硕士研究生招生目录(初稿),其中不难发现083500软件工程初试专业课由819数据结构改为408计算机学科专业基础 图片:陕西科技大学24专业目录-软件工程学硕 https://yjszs.sus…...
02.有监督算法——朴素贝叶斯
1.朴素贝叶斯 1.1条件概率 如果两个事件A和B不是相互独立,并且知道事件B已经发生,A在B中的条件概率: P ( A ∣ B ) P ( A B ) P ( B ) P(A|B) {P(AB) \over P(B)} P(A∣B)P(B)P(AB) 先验概率: 根据以往经验和分析得到的概…...
前端新手学习路线
文章目录 前端学习路线!特点符号表大纲前言 - 学编程需要的特质一、前端入门⭐️ 开发工具浏览器编辑器文档笔记 ⭐️ HTML⭐️ CSS⭐️ JavaScript✅ ES6 特性 二、巩固基础前端基础知识计算机基础✅ 算法和数据结构✅ 计算机网络✅ 操作系统 软件开发基础✅ 设计模…...
vactor中迭代器失效问题
目录 什么是迭代器失效导致迭代器失效的操作VS和g环境下对与迭代器失效的态度 什么是迭代器失效 迭代器的底层其实就是一个指针,或者对指针进行了封装 vector的迭代器就是一个指针T* 一个迭代器指向某一个空间,此时这块空间被释放了,这个迭…...
电子商务防火墙的作用
1.作为网络安全的屏障 只有经过精心选择的应用协议才能通过防火墙,可使网络环境变得更安全。如 防火墙可以禁止 NFS 协议进出受保护的网络,这样外部的攻击者就不可能利用这些 脆弱的协议来攻击内部网络。防火墙同时可以保护网络免受基于路由的攻击&am…...
「UG/NX」Block UI 选择特征SelectFeature
✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...
【数据分享】2006-2021年我国城市级别的节约用水相关指标(免费获取\20多项指标)
《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…...
Azure不可变Blob存储
文章目录 Azure不可变Blob存储介绍Azure不可变性策略实战演练 Azure不可变Blob存储介绍 不可变的存储是一种用于存储业务关键型 Blob 数据的存储方式。与可变存储相反,不可变存储的特点是一旦数据被写入后,便无法再对其进行修改或删除。这种存储方式提供…...
No mapping found for HTTP request with URI
参考: 参考地址 说明 ssm老项目,接过来别人的项目 临时建了一个Controller方便测试用的,结果访问掉不通,报: No mapping found for HTTP request with URIxxxx 这样的错误 解决办法 看了下web,xml配置 在 webmvc-config.xml 配置文件里面添加了几行配置 说明: com.iph.h…...
视频转云存的痛点
现在整个运营商体系里面,有大量的视频转云存储的需求,但是视频云存储有一个比较大的痛点,就是成本! 成本一:存储成本; 我们以1000路2M视频转云存,存储时间为90天为例(B端存储时间有…...
3D医学教学虚拟仿真系统:身临其境感受人体结构和功能
3D医学教学虚拟仿真系统是一种基于虚拟现实技术的教学工具,它可以帮助学生更好地理解和掌握医学知识。这种课件通常包括人体解剖学、生理学、病理学等方面的教学内容,通过三维立体的图像和动画展示,让学生更加直观地了解人体结构和功能。 与传…...
【.net】本地调试运行只能用localhost的问题
【.net】本地调试运行只能用localhost的问题 解决方案 找到到项目目录下 隐藏文件夹 .vs /项目名称/config/applicationhost.config <bindings><binding protocol"http" bindingInformation"*:1738:localhost" /></bindings> 再加一条你…...
营销数字化|企业级 AIGC 工具的「iPhone 时刻」
2007 年,乔布斯发布了第一款 iPhone,从此彻底改变了手机行业的市场走向。iPhone 成功的背后,一个很重要的原因是:它让用户以更简单、更符合直觉的方式来使用手机。 如今,AIGC 工具也在等待它的「iPhone 时刻」…...
Zookeeper集群单节点启动成功但未同步其他节点数据
首先排查节点启动是否正常: 在zookeeper的bin目录下执行:sh zkServer.sh status 判断当前节点数据leader 还是follower 节点都启动正常,但某一个zookeeper集群节点(下面简称“异常节点”)不同步其他节点数据…...
回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现TSO-LSSVM金枪鱼群算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图&a…...
给别人做网站打电话推销/株洲网站建设
前言 最近学弟去面了字节跳动,但是由于面试经验少,面试的时候紧张了,一时之间没有写出来,之后来我交流了一下。那我就来分析分析这道题目。image-20200906001022824正文 这题的规则是这样的给定有一个 Add 函数,要支持…...
摄影公司网站/怎么开网店新手入门
scrapy_redis在继承scrapy去重组件的基础上覆盖了某些方法,原scrapy去重是基于单机情况下的内部去重,但是分布式是多机条件下的多爬虫协同去重,因此需要让不同及其上的同一个爬虫能够在同一个地方进行去重,这就是Redis的集合。 先…...
做彩票生意要登陆哪个网站/管理微信软件
roles类似于salt-stack里面的state,state有一定的组织结构。而roles则是ansible中,playbooks的目录组织结构。这么划分有啥好处呢?好处多了去了,如果把所有的东西都写到playbooks里面的话,可能会导致我们这个playbooks…...
wordpress调试/seo外包公司如何优化
runtime/KVO等面试题 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法。 派生类在被重写的se…...
专门做教育咨询有限公司网站/郑州网站建设十大公司
一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示:图1 再来一张它的背…...
自助建站网站源码/阿里云免费建站
读:本文是来自移动应用开发公司Sourcebits系列文章Mobile App Trends Series(译者:此网站要梯子)中的一篇,文章内容适合初涉此领域的读者,现翻译如下。 在了解了 跨平台移动应用设计的利弊 和 移动应用开发…...