当前位置: 首页 > news >正文

深圳网站制作公司报价/网络营销属于哪个专业

深圳网站制作公司报价,网络营销属于哪个专业,wordpress可折叠菜单,阿里云域名交易平台在现代Web应用程序中,WebSocket已经成为实时双向通信的重要组件。而Shiro作为一个强大的Java安全框架,用于处理身份验证、授权和会话管理。本文将探讨如何通过WebSocket与Shiro集成,实现认证信息的传递,并关注在这一过程中确保安全…

在现代Web应用程序中,WebSocket已经成为实时双向通信的重要组件。而Shiro作为一个强大的Java安全框架,用于处理身份验证、授权和会话管理。本文将探讨如何通过WebSocket与Shiro集成,实现认证信息的传递,并关注在这一过程中确保安全性的关键考虑因素。

WebSocket与Shiro集成

步骤概述

  1. WebSocket连接建立: 客户端与服务器建立WebSocket连接时,可将Shiro的Session ID传递给服务器。

  2. Session ID传递: 在连接建立后,通过WebSocket消息机制将Shiro的Session ID发送到服务器。

  3. 服务器端处理: 服务器端接收WebSocket消息,解析其中的Session ID。

  4. Shiro Session获取: 使用解析到的Session ID,服务器端通过Shiro的SessionManager获取Shiro的Session对象。

  5. 认证信息提取: 从Shiro的Session对象中提取认证信息,如用户身份、角色、权限等。

  6. WebSocket消息回复: 将认证信息通过WebSocket消息发送回客户端,可能需要对信息进行序列化。

代码示例

package com.nbsaas.boot.websocket;import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.nbsaas.boot.rest.response.ResponseObject;
import com.nbsaas.boot.security.config.MySessionManager;
import com.nbsaas.boot.user.ext.domain.response.UserInfoExtResponse;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.DefaultSessionKey;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.subject.support.DefaultSubjectContext;
import org.springframework.beans.BeanUtils;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;public class TalkSocketHandler extends TextWebSocketHandler {public List<WebSocketSession> sessions = new ArrayList<>();public Map<String, WebSocketSession> sessionMap = new Hashtable<>();@Resourceprivate MySessionManager mySessionManager;@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {// 处理来自客户端的消息String payload = message.getPayload();System.out.println(sessionMap.size());JSONObject obj=null;try {obj = JSON.parseObject(payload);}catch (Exception e){session.sendMessage(new TextMessage(JSON.toJSONString(ResponseObject.error(501, "无效数据格式"))));return;}String sessionId = obj.getString("sessionId");if (sessionId == null) {session.sendMessage(new TextMessage(JSON.toJSONString(ResponseObject.error(501, "没有会话id"))));return;}try {UserInfoExtResponse result = getUserInfoExtResponse(sessionId);System.out.println(result);} catch (Exception e) {e.printStackTrace();session.sendMessage(new TextMessage(JSON.toJSONString(ResponseObject.error(401, "会话失效"))));}// 这里可以编写处理消息的逻辑}private UserInfoExtResponse getUserInfoExtResponse(String sessionId) {Session temp = mySessionManager.getSession(new DefaultSessionKey(sessionId));Object user = temp.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);if (user == null) {return null;}if (user instanceof SimplePrincipalCollection) {SimplePrincipalCollection simplePrincipalCollection = (SimplePrincipalCollection) user;Object obj = simplePrincipalCollection.getPrimaryPrincipal();if (obj instanceof UserInfoExtResponse) {return (UserInfoExtResponse) obj;}UserInfoExtResponse result = new UserInfoExtResponse();BeanUtils.copyProperties(obj, result);return result;}return null;}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 当WebSocket连接建立时调用super.afterConnectionEstablished(session);// 添加新连接的WebSocketSession到集合中sessions.add(session);sessionMap.put(session.getId(), session);// 执行其他初始化操作...}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {// 当WebSocket连接关闭时调用sessions.remove(session);sessionMap.remove(session.getId());}
}

前端websocket 传递这样的消息

{
"sessionId":"shiro会话id",
.... 其他内容
}

安全性探讨

  1. 安全风险

在WebSocket传递认证信息的过程中,可能面临以下安全风险:

中间人攻击: 未加密的通信可能受到中间人攻击的威胁,导致信息泄露或篡改。
信息泄露: 如果不谨慎处理认证信息的传递,可能会导致敏感信息泄露。
  1. 安全解决方案

为了应对这些安全风险,可以考虑以下解决方案:

  • 加密通信: 使用WebSocket Secure (WSS) 或其他加密通信机制,确保传递的信息在传输过程中得到保护。
  • 使用HTTPS: 将应用程序部署在HTTPS协议下,提供端到端的安全通信。
  • CSRF防护: 在WebSocket连接建立时,可以采用CSRF防护机制,确保请求的合法性。
  1. 用户隐私保护

在传递认证信息时,必须注意用户隐私的保护。这包括:

  • 最小化传递信息: 仅传递必要的认证信息,避免传递过多敏感数据。
  • 信息脱敏: 在传递信息前,对敏感信息进行适当的脱敏处理,以降低隐私泄露的风险。

结论

通过WebSocket与Shiro集成,实现认证信息的传递是一项复杂而关键的任务。在此过程中,确保通信的安全性和用户隐私的保护至关重要。通过加密通信、使用HTTPS和采用CSRF防护等方法,可以有效地应对潜在的安全风险,使得WebSocket与Shiro的集成更加可靠和安全。

相关文章:

WebSocket与Shiro认证信息传递的实现与安全性探讨

在现代Web应用程序中&#xff0c;WebSocket已经成为实时双向通信的重要组件。而Shiro作为一个强大的Java安全框架&#xff0c;用于处理身份验证、授权和会话管理。本文将探讨如何通过WebSocket与Shiro集成&#xff0c;实现认证信息的传递&#xff0c;并关注在这一过程中确保安全…...

QT 实现自动生成小学两位数加减法算式

小学生加减法训练 QT实现–自动生成两位数加减法算式&#xff0c;并输出txt文件 可以copy到word文件&#xff0c;设置适当字体大小和行间距&#xff0c;带回家给娃做做题 void MainWindow::test(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *gener…...

小程序学习-20

建议每次构建npm之前都先删除miniprogram_npm...

面试题-【消息队列】

消息队列 问题1 如何进行消息队列的技术选型优点解耦 &#xff08;pub/sub模型&#xff09;异步&#xff08;异步接口性能优化&#xff09;削峰 使用消息队列的缺点几种消息队列的特性 问题2 引入消息队列之后该如何保证其高可用性RabbitMQ的高可用kafka高可用 问题3 在消息队列…...

【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前&#xff0c;我们先捋一捋&#xff0c;串口的相关特点来和I2C进行一个对北比。 首先&#xff1a; 1,大部分单片机&#xff0c;设计的PCB板均带有串口通信的引脚&#xff08;也就是通信基本都借助硬件收发器来实现&#xff09; 2.对于串口的异步时序&#xff…...

【机器学习300问】15、什么是逻辑回归模型?

一、逻辑回归模型是为了解决什么问题&#xff1f; 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广义线性回归分析模型&#xff0c;尤其适用于解决二分类问题&#xff08;输出为两个类别&#xff09;。 &#xff08;1&#xff09;二分类举例 邮件过滤&#xff…...

C#调用C动态链接库

前言 已经没写过博客好久了&#xff0c;上一篇还是1年半前写的LTE Gold序列学习笔记&#xff0c;因为工作是做通信协议的&#xff0c;然后因为大学时没好好学习专业课&#xff0c;现在理论还不扎实&#xff0c;不敢瞎写&#xff1b; 因为工作原因&#xff0c;经常需要分析一些字…...

前端实现转盘抽奖 - 使用 lucky-canvas 插件

目录 需求背景需求实现实现过程图片示意实现代码 页面效果lucky-canvas 插件官方文档 需求背景 要求实现转盘转动抽奖的功能&#xff1a; 只有正确率大于等于 80% 才可以进行抽奖&#xff1b;“谢谢参与”概率为 90%&#xff0c;“恭喜中奖”概率为 10%&#xff1b; 需求实现 实…...

2024.1.23力扣每日一题——最长交替子数组

2024.1.23 题目来源我的题解方法一 枚举 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2765 我的题解 方法一 枚举 每次都以两个相邻作为满足要求的循环数据&#xff0c;并且以一个布尔变量控制循环的位置 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) pub…...

C语言王道练习题第七周两题

第一题 Description 输入一个学生的学号&#xff0c;姓名&#xff0c;性别&#xff0c;用结构体存储&#xff0c;通过 scanf 读取后&#xff0c;然后再 通过 printf 打印输出 Input 学号&#xff0c;姓名&#xff0c;性别&#xff0c;例如输入 101 xiongda m Output 输出…...

某马头条——day11+day12

实时计算和定时计算 流式计算 kafkaStream 入门案例 导入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusions><exclusion><artifactId>connect-json</artifactId&…...

springboot实现aop

目录 AOP(术语)引入依赖实现步骤测试验证感谢阅读 AOP(术语) 连接点 类里面哪些方法可以增强&#xff0c;这些点被称为连接点 切入点 实际被真正增强的方法 通知&#xff08;增强&#xff09; 实际增强的逻辑部分称为通知&#xff08;增强&#xff09; 通知&#xff08;增强&…...

Golang 中高级工程师学习笔记

闭包的作用 闭包&#xff08;Closure&#xff09;是一种函数值&#xff0c;它可以引用在其外部定义的变量。闭包允许这些变量保持在函数内部&#xff0c;而不是被每次调用时重新创建。闭包的作用主要体现在以下几个方面 封装&#xff1a; 闭包允许函数访问其外部作用域中的变…...

USB-C接口给显示器带来怎样的变化?

随着科技的不断发展&#xff0c;Type-C接口已经成为现代电子设备中常见的接口标准。它不仅可以提供高速的数据传输&#xff0c;还可以实现快速充电和视频传输等功能。因此&#xff0c;使用Type-C接口的显示器方案也受到了广泛的关注。本文将介绍Type-C接口显示器的优势、应用场…...

写一份简单的产品说明书:格式和排版建议

现在的市场竞争那么激烈&#xff0c;拥有一份简洁明了的产品说明书可以说是很重要的。产品说明书不仅向用户提供了对产品的详细了解&#xff0c;还能够树立品牌形象&#xff0c;提升用户体验。 | 一、写一份简单的产品说明书—一些建议 1.创意封面设计 一个吸引人的封面设计能…...

【Python学习】Python学习21- 正则表达式(1)

目录 【Python学习】Python学习21- 正则表达式&#xff08;1&#xff09; 前言re.match函数实例 re.search方法re.match与re.search的区别参考 文章所属专区 Python学习 前言 本章节主要说明Python的正则表达式。 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的…...

Docker 和 Kubernetes:容器化时代的崛起与演变

在过去的十年间&#xff0c;容器化技术彻底改变了软件开发和部署的面貌。 Docker 的登场无疑是这场变革的催化剂&#xff0c;它将应用和服务的打包、分发、部署流程标准化&#xff0c;让开发者的生活变得更加简单。 紧随其后&#xff0c;Kubernetes 作为容器编排的领军者&#…...

美易官方京东养车回应索赔事件:推动行业健康发展并携手品牌商家加码补贴

近日&#xff0c;一则关于途虎养车起诉京东索赔500万元的新闻引起了业界的广泛关注。据华尔街见闻1月25日报道&#xff0c;针对此事&#xff0c;京东养车相关负责人作出了回应。京东养车表示&#xff0c;“震虎价”并非针对特定企业&#xff0c;其核心目的在于通过提升效率来改…...

深度学习与图像描述生成——看图说话(3)

目录 一、整体架构 二、学习策略 2.1 监督学习 2.2 无监督学习 2.3 强化学习 三、特征映射 3.1 定义 3.2 原理 3.3 关键技术 3.4 重要案例 3.5 特别注意下特征空间这一概念 四、语言模型 4.1 定义与原理 4.2 关键技术 4.3 重要性与作用 4.4 案例与应用 五、注…...

[SAP ABAP] ABAP编程中SY-SUBRC值的含义

在ABAP编程中&#xff0c;SY-SUBRC是一个系统变量&#xff0c;用于表示最近一次执行的系统命令(例如数据库操作、函数模块调用等)的结果状态码 SY-SUBRC的值用于检查命令是否执行成功&#xff0c;通常用于控制程序的流程 查询数据 使用SELECT语句选择查询 SY-SUBRC 0 &qu…...

测试模型分类

测试模型 1. 概述 软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理,所以理解好软件的开发模型会便于理解测试模型. 软件测试的一般流程: 我们发现一般的软件测试流程和软件开发的流程一样,但是这样的流程测试介入的较晚,对于前期重大的bug很难修复.所以测试的流程…...

mavros和PX4中的海拔高与椭球高转换

飞控高度传感器中一般有两种高度&#xff1a; 海拔高。也称AMSL&#xff08;Above Mean Sea Level&#xff09;height或者geoid height或者正高&#xff0c;顾名思义就是指高于当地平均海平面的高度。我猜气压计测得的高度应当就是与海平面相关的。椭球高。也称ellipsoid heig…...

洛谷刷题-【入门2】分支结构

目录 1.苹果和虫子 题目描述 输入格式 输出格式 输入输出样例 2.数的性质 题目描述 输入格式 输出格式 输入输出样例 3.闰年判断 题目描述 输入格式 输出格式 输入输出样例 4.apples 题目描述 输入格式 输出格式 输入输出样例 5.洛谷团队系统 题目描述 …...

文件包含技术总结

开发人员一般会把重复使用的函数写到单个文件中&#xff0c;需要使用某个函数时直接调用此文件&#xff0c;而无需再次编写&#xff0c;这中文件调用的过程一般被称为文件包含。 allow_url_fopen On&#xff08;是否允许打开远程文件&#xff09; allow_url_include On&…...

Docker搭建私有仓库

Docker搭建私有仓库 下载docker registry镜像 docker pull docker.io/registry2.registry镜像下载完成后&#xff0c;先创建一个存放镜像的目录。 mkdir -p /data/registry3.启动registry容器 docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry docker.io…...

【计算机网络】【练习题】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 该题目描述一个网络中传播时延&#xff08;Transmission Delay&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;个人&#xff09; 笔者第3问采用均值不等式求解。标答中采用求导数的方法求极值。似乎均值…...

【学习笔记】CF1349F2 Slime and Sequences (Hard Version)

多项式工业警告&#xff01;&#xff01;&#xff01; 点击看题意 思路来自 这位大佬 。 为什么这么好的题解没人评论。 Part 1 前置知识&#xff1a;拉格朗日反演&#xff08;多项式复合&#xff09;&#xff0c;分式域&#xff08;引入负整数次项&#xff09;。 条件&a…...

HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

自定义弹窗&#xff08;CustomDialog&#xff09;可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。 在应用的使用和开发中&#xff0c;弹窗是一个很常见的场景&#xff0c;自定义弹窗…...

# Java NIO(一)FileChannel

Java NIO 1.BIO与NIO的区别 BIO为阻塞IO&#xff0c;NIO为非阻塞IO。 BIONIOJAVA1.4之前Java 1.4之后面向流&#xff1a;以byte为单位处理数据面向块&#xff1a;以块为单位处理数据同步阻塞同步非阻塞无选择器&#xff08;Selector&#xff09; 1.1NIO的核心组成部分 Cha…...

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 采集电压(3) 示例代码&#xff08;电压&#xff09;(4) 仿真效果 …...