微服务概述-7

news2024/11/16 9:39:06

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 的使用有四方面需要注意:

  1. 安全性:由于 Session ID 存储在用户的 Cookie 中,需要采取适当的安全措施来保护 Session 数据。这包括

使用加密传输、限制 Session ID 的有效期等。

  1. 存储容量:Session 数据存储在服务器上,因此需要考虑服务器的存储容量和性能。过多或过大的 Session数据可能会对服务器造成压力。
  2. 生命周期:Session 可以有不同的生命周期设置,例如在用户关闭浏览器后立即过期,或者在一定时间段内保持活动状态。开发人员需要根据应用需求来配置 Session 的生命周期。
  3. 分布式环境:在分布式环境中,需要确保 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 具有良好的扩展性,可以根据需要自定义会话存储、会话管理和会话策略等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/887555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ABAP 新语法--Data Processing

1. String Template 新语法引入了字符串模板,用于处理字符串连接以及格式转换 字符串模板在 | … | 之间定义,主要分为两部分,固定文本和变量 其中,变量只能在 { … } 内使用,大括号之外的所有字符均作为固定文本使用…

windows以管理员的身份运行CMD

电脑在装系统的时候,我的用户不是最高权限的管理员。 今天在工作的时候,使用CMD。运行失败,提示我需要使用管理员的身份运行CMD才可以。 使用右键点击左下角的windows图标 选择红框标注的那项。 以普通身份运行: 以管理员身份运行…

【iMessage频發软件苹果群发技术开源原创】当 APNs 发送通知到一个离线设备时,APNs 会把通知存储起来(一定的时间内),当设备上线时再递送给设备。

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

睿趣科技:抖音开网店现在做还来得及吗

随着社交媒体的迅速发展,抖音作为一款短视频平台,已经在年轻人中间取得了巨大的成功。而近年来,越来越多的人开始考虑在抖音上开设网店,以迎合这一潮流。那么,抖音开网店现在还来得及吗? 首先,要明确的是&…

C语言实现哈希搜索算法

一、哈希搜索算法原理 哈希搜索,也叫散列查找,是一种通过哈希表(散列表)实现快速查找目标元素的算法。哈希搜索算法通常适用于需要快速查找一组数据中是否存在某个元素的场景,其时间复杂度最高为 O(1),而平…

CSS(JavaEE初阶系列14)

目录 前言: 1.CSS是什么 1.1CSS基本语法 2.引入样式 2.1内部样式表 2.2行内样式表 2.3外部样式 3.选择器 3.1选择器的种类 3.1.1基础选择器 3.1.2复合选择器 4.常用元素属性 4.1字体属性 4.2文本属性 4.3背景属性 4.4圆角矩形 4.5元素的显示模式 4…

docker+haror

docker 2013年诞生,推荐单容器只运行一个程序或进程,形成一个分布式的应用模型。 总结下来就是:docker带来启动流程更快,运行效率较高、资源损耗较小,属于轻量级的服务。 docker的安装 推荐的一键化安装的脚本&#…

2022年第八届美亚杯个人赛

1.[单选题] 王晓琳在这本电子书籍里最后对哪段文字加入了重点标示效果(Highlight)?(2分) A. 卿有何妙计 B. 宝玉已是三杯过去了 C. 武松那日早饭罢 D. 就除他做个强马温罢 结合最后一题 2.[多选题] 王晓琳的手机里有一个 MTR Mobile (港)的手机程序(Mobile App)。 检视其数…

《QT+PCL》点云的点选与框选

《QT+PCL》点云的点选与框选 效果展示关键代码对应Qt6与pcl1.13对应Qt6与pcl1.12对应Qt5与pcl1.12对应Qt5与pcl1.11资源效果展示 关键代码 对应Qt6与pcl1.13 点选 //点选--------------回调函数 void MainWindow::pp_callback_PointsSelect(const

python中使用xml快速创建Caption和URL书签管理器应用程序

导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…

微信小程序前后端开发快速入门(完结篇)

这篇是微信小程序前后端快速入门完结篇了,今天利用之前学习过的所有知识做一个新的项目「群登记助手v1.0」小程序。 整体技术架构:小程序原生前端小程序云开发。 经历了前面教程的学习,大家有了一定的基础,所以本次分享重心主要是…

SOFABoot——基本使用(笔记)

文章目录 一、前言二、快速开始2.1 基本搭建2.2 测试是否成功2.3 其他部分日志测试异步启动 三、SOFABoot的模块化开发3.1 基于Spring上下文的隔离3.2 Root Application Context3.3 模块并行化启动3.4 JVM服务与RPC服务的发布与引用3.5 模块配置Module-NameRequire-ModuleSprin…

深入理解JVM——垃圾回收与内存分配机制详细讲解

所谓垃圾回收,也就是要回收已经“死了”的对象。 那我们如何判断哪些对象“存活”,哪些已经“死去”呢? 一、判断对象已死 1、引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加一&…

在IDEA中创建properties配置文件

第一步:在 src路径下找到resources文件 第二步:右击选择新建Resource Bundle配置文件 第三步:为Resource Bundle配置文件命名 完成创建

高效反编译luac文件

对于游戏开发人员,有时候希望从一些游戏apk中反编译出源代码,进行学习,但是如果你触碰到法律边缘,那么你要非常小心。 这篇文章,我针对一些用lua写客户端或者服务器的编译过的luac文件进行反编译,获取其源代码的过程。 这里我不赘述如何反编译解压apk包的过程了,只说重点…

k8s的pv和pvc创建

//NFS使用PV和PVC 1、配置nfs存储 2、定义PV 实现 下图的pv和pvc测试 pv的定义 这里定义5个PV,并且定义挂载的路径以及访问模式,还有PV划分的大小 vim /pv.yamlapiVersion: v1 kind: PersistentVolume metadata:name: pv001 spec:capacity:storage: …

【目标检测】目标检测 相关学习笔记

目标检测算法 PASCALVOC2012数据集 挑战赛主要分为 图像分类 目标检测 目标分割 动作识别 数据集分为四个大类 交通(飞机 船 公交车 摩托车) 住房(杯子 椅子 餐桌 沙发) 动物(鸟 猫 奶牛 狗 马 羊) 其他&a…

Java 单例模式简单介绍

何为单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 实现思路 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必…

MBR400100CT-ASEMI肖特基模块MBR400100CT

编辑:ll MBR400100CT-ASEMI肖特基模块MBR400100CT 型号:MBR400100CT 品牌:ASEMI 封装:M2 正向电流:400A 反向电压:100V 引线数量:2 芯片个数:2 芯片尺寸:102MIL…