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

Java基础八 - HTTP相关/Cookie/Session/网络攻击

一、 反射/序列化/拷贝

1. 反射

//反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
//在Yaml数据驱动自动化框架比较适用,能获取到当前的类名及方法名
import java.lang.reflect.*;public class ReflectionExample {public static void main(String[] args) throws Exception {// 获取当前类的 Class 对象Class<?> currentClass = ReflectionExample.class;// 获取当前方法的 Method 对象Method currentMethod = currentClass.getDeclaredMethod("main", String[].class);// 获取类名和方法名String className = currentClass.getName();String methodName = currentMethod.getName();System.out.println("当前类名:" + className);System.out.println("当前方法名:" + methodName);}
}

2. 序列化

序列化是指将一个对象抓换为字节流在网络上传输到服务器,服务器对其进行反序列化
可以使用 Serializable 接口来标记一个类可以被序列化

3. 动态代理

Java 动态代理是一种在运行时生成代理类的机制,
允许你在不事先知道具体代理类的情况下创建代理对象。
动态代理通常用于在代理模式中,通过代理对象来控制对实际对象的访问,
并可以在代理的前后添加一些额外的逻辑。动态代理的用途包括:日志记录:在方法调用前后添加日志记录。
性能监控:统计方法调用的耗时。
事务管理:在方法调用前后开启、提交或回滚事务。
权限控制:在方法调用前检查用户权限。
缓存控制:在方法调用前从缓存中获取数据,或在方法调用后将结果缓存起来。

4. 深拷贝和浅拷贝

1. 浅拷贝
只复制了对象的引用地址,2个引用指向同一个内存地址,在其中一个变化后,另一个的也会同时变化。
2. 深拷贝
既复制了内存地址,也复制了引用地址;变化不会影响其他

二、Http相关

1. Session与Cookie

1. Session存储在服务端,Cookie存储在用户本地浏览器
2. Session更加安全,cookie可能会存在被篡改的风险
3. Session存储比较大的数据,而Cookie相对比较小,不超过4kb
Session的工作原理:存储在服务器的Session可以理解是一个Map。
Session是key,里面还有其他用户信息是value。
用户请求的时候拿Cookie包装了sessionID换取其他信息

2. 如何避免sql注入

攻击原理:在浏览器通过伪造,注入一段sql达到查询/修改数据库,达到攻击目的
避免:
1. 使用参数化查询
2. 对输入的内容进行(正则/字符串)过滤
3. 使用 Web 应用防火墙(WAF)来检测和阻止恶意 SQL 注入攻击。

3. XSS(跨站脚本攻击)

原理:用户在浏览网页的时候,通过Xss注入HTML代码,当用户浏览或者输入某些内容的时候自动调用,
从而获取当前网页用户的消息
避免:对输入/URL进行过滤,对输出进行编码。

4. CSRF(跨站网站攻击

原理:
给用户提供和目标网站类似的网站/放置恶意链接,用户在登录状态下点击某功能。
导致调用链其他链接,例如:修改密码,转账等避免:
1. 敏感操作短信验证码
2. CSRF  token1). CSRF Token 是一种用于防止 CSRF 攻击的机制。网站会在用户登录后,为用户生成一个随机的 CSRF Token,并将其存储在用户的会话中或者通过 Cookie 返回给用户。2). 在进行敏感操作(如修改密码、更改账户信息)时,网站会要求用户提供这个 CSRF Token。用户在提交请求时,需要将 CSRF Token 随请求一同发送到服务器。3). 服务器会验证提交的 CSRF Token 是否与会话中或者 Cookie 中的 Token 匹配,如果匹配则说明请求是合法的,否则拒绝请求。

三、HTTP状态及传输方式

1. 301与302redirect(重定向)

301 永久重定向
302 暂时重定向

2. forward 和 redirect 的区别

1. forward
直接转发 - 客户端/浏览器发出1次请求,A请求B,B请求C。最后C把信息转发给了A
2. redirect
间接转发 - 客户端/浏览器发出2次请求,A请求B,不通并让请求C,A请求了C

3. tcp和udp

1. TCP面向连接,UDP不面向连接。TCP需要3次握手和4次挥手
2. TCP是稳定传输,适合小流量,UDP是可能存在丢包,用于大文件传输/在线游戏等

4. OSI 的七层模型

OSI(Open Systems Interconnection)模型是一个网络协议的参考模型,将网络通信划分为七个层次,每个层次负责不同的功能。以下是 OSI 模型的七层以及通俗易懂的例子:1. 物理层(Physical Layer):负责传输原始比特流,处理物理连接、电压、光信号等。
例子:以太网的电缆、光纤、网卡等。2. 数据链路层(Data Link Layer):提供点对点的可靠数据传输,将比特流分组成帧,并进行错误检测和纠正。
例子:以太网帧、Wi-Fi 数据帧。3. 网络层(Network Layer):负责寻址和路由,将数据包从源主机传输到目标主机。
例子:IP 地址、路由器。4. 传输层(Transport Layer):提供端到端的数据传输,负责分段、重组和流量控制。
例子:TCP、UDP。5. 会话层(Session Layer):管理不同应用之间的会话,建立、维护和终止连接。
例子:会话管理、连接控制。
6. 表示层(Presentation Layer):负责数据的格式转换、加密、解密等,确保应用之间的数据能够正确解释。
例子:数据压缩、加密解密。7. 应用层(Application Layer):最上层,提供用户应用程序的接口,处理用户数据和网络通信。
例子:Web 浏览器、电子邮件客户端、文件传输协议(FTP)。

5. HTTP常见状态码

200 OK: 请求正常
204 No Content:服务器处理了请求,但是木有任何返回
400 Bad Request:用户发送了请求,但是服务器无法处理;不认识看不懂
401 Unauthorized:认证失败,鉴权过期等
403 Forbidden:请求被拒绝
404 Not Found:请求的链接有问题可能,找不到
500 Internal Server Error:服务器异常了
503 Service Unavailable:服务器暂时无法处理请求,可能是维护
504 Service Timeout:服务器从上游接收消息超时

相关文章:

Java基础八 - HTTP相关/Cookie/Session/网络攻击

一、 反射/序列化/拷贝 1. 反射 //反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力 //在Yaml数据驱动自动化框架比较适用&#xff0c;能获取到当前的类名及方法名 import java.lang.reflect.*;public class ReflectionExample {public static void main(Str…...

【车道线】TwinLiteNet 复现过程全纪录

码字不易&#xff0c;喜欢的请点赞收藏&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 论文全文翻译&#xff1a;【freespace】TwinLiteNet: An Efficient and Lightweight Model for Driveable Area and Lane Segmentation_莫克_Cheney的博客-CSDN博客 目录…...

七牛云获取qn(url、bucket、access-key、secret-key)

1.注册账号 2.access-key和secret-key&#xff1a; 点击“密钥管理” 复制AK和SK即可 域名&#xff1a; bucket&#xff1a; 这个就是对象存储空间名字 先新建一个空间&#xff08;没买需要先购买&#xff09;&#xff0c;步骤如下&#xff1a; 填写存储空间名字&#xff0…...

定时任务实现 - Cron表达式知识

Cron表达式 cron表达式是一个字符串&#xff0c;由6到7个字段组成&#xff0c;用空格分隔。其中前6个字段是必须的&#xff0c;最后一个是可选的。每个字段的含义为&#xff1a;秒 分 时 日 月 周 年 字符解释: 枚举&#xff1a;, (cron“7,9,23****?”)&#xff1a;任意时刻…...

【java】抽象

java抽象 抽象类抽象方法抽象类和抽象方法 抽象类 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就…...

Qt应用开发(基础篇)——时间微调输入框 QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…...

日撸代码300行:第63天(集成学习之 AdaBoosting-1)

代码来自闵老师”日撸 Java 三百行&#xff08;61-70天&#xff09; 日撸 Java 三百行&#xff08;61-70天&#xff0c;决策树与集成学习&#xff09;_闵帆的博客-CSDN博客 学习过程中理解算法参考了&#xff1a;&#xff08;十三&#xff09;通俗易懂理解——Adaboost算法原…...

抽象父类获取子类的泛型 或接口泛型

jie通过getClass().getGenericSuperclass()或者子类的泛型 getClass().getGenericInterfaces();获取多个接口的泛型 GenericTypeResolver.resolveTypeArgument(GenericityService.class, GenericitySuper.class) 抽象父类 public abstract class GenericitySuper<T> …...

题目:2341.数组能形成多少数对

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2341. 数组能形成多少数对 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用哈希表对数组中元素及其出现次数计数后对其进行统计即可。 解题代码&#xff1a; class Solution {public …...

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么?

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么? 参考链接:https://www.sohu.com/a/221664826_472880 NB IOT是窄带物联网技术,主要解决的是低速率数据传输,可使用GSM900或DCS1800频段,在频段使用上比较灵活,可以和GSM,UMTS或LTE共存,具备优异的MCL(最小耦合损耗…...

vue3 动态导入src/page目录下的所有子文件,并自动注册所有页面组件

main.js添加一下代码&#xff1a; const importAll (modules) > {Object.keys(modules).forEach((key) > {const component key.replace(/src/, /).replace(.vue, );const componentName key.split(/).slice(-2, -1)[0] -page;app.component(componentName, modules…...

python优雅地爬虫

申明&#xff1a;仅用作学习用途&#xff0c;不提供任何的商业价值。 背景 我需要获得新闻&#xff0c;然后tts&#xff0c;在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路&#xff1a;获得html内容-> python的工具库解析&#xff0…...

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…...

vscode关闭绑定元素“xxx”隐式具有“any”类型这类错误

在ts的项目里面&#xff0c;真的经常看到any类型的报错&#xff0c;真的很烦的 所以为了眼不见心不乱&#xff0c;我决定消除这个错误提示 在tsconfig.json里面配置 "noImplicitAny": false 就可以了 {"compilerOptions": {"target": "E…...

View绘制流程-Window创建

前言&#xff1a; View绘制流程中&#xff0c;主要流程是这样的&#xff1a; 1.用户进入页面&#xff0c;首先创建和绑定Window&#xff1b; 2.首次创建以及后续vsync信号来临时&#xff0c;会请求执行刷新流程&#xff1b; 3.刷新流程完成后&#xff0c;会通知SurfaceFlin…...

Jenkins build包时虽然单元测试失败了,但是仍然可以成功build包(最终结束时build success)

1.尝试方案1&#xff1a; 尽管单元测试失败&#xff0c;Jenkins Maven仍然可以获得成功-Java 学习之路 将 -Dmaven.test.failure.ignorefalse 添加到 MAVEN_OPTS artifactoryMaven {goals "-U clean install -Dmaven.test.skipfalse -DallowSnapshotstrue -Dmaven.te…...

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…...

idol!! 2023牛客暑期多校训练营6 C

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;定义n!!等于与n的奇偶性相同的所有小于等于n的数的阶乘之和&#xff0c;问n!!的末尾有多少0 1<n<1e18 思路&#xff1a;因为末尾0的来源是2*5&#xff0c;而2的个数明显比5的个数多得多&#xff0c;所以末尾…...

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存

深入理解Jdk5引入的Java泛型&#xff1a;类型安全与灵活性并存 ​ 在Java的中&#xff0c;有一个强大的工具&#xff0c;它可以让你在编写代码时既保持类型安全&#xff0c;又享受灵活性。**这个工具就是——泛型&#xff08;Generics&#xff09;。**本文将引导你深入了解Java…...

idea在控制台中输出文字显示乱码

VM options中加入下面这行 -Dfile.encodingutf-8...

gitlab CI/CD本地部署配置

背景: 代码管理平台切换为公司本地服务器的gitlab server。为了保证commit的代码至少编译ok&#xff0c;也为了以后能拓展test cases&#xff0c;现在先搭建本地gitlab server的CI/CD基本的编译job pipeline。 配置步骤&#xff1a; 先安装gitlab-runner: curl -L "ht…...

小白如何在cursor中使用mcp服务——以使用notion的api为例

1. 首先安装node.js,在这一步的时候不要勾选不要勾选 2. 安装完之后,前往notion页面 我的创作者个人资料 | Notion 前往集成页面&#xff0c;添加新集成&#xff0c;自己输入名字&#xff0c;选择内部 新建完之后&#xff0c;进入选择只读 复制密匙 然后前往cursor页面 新建…...

STL解析——list的使用

目录 1.简介 2.构造函数 3.迭代器 3.1封装 3.2迭代器分类 4.排序性能 4.1链式与数组 4.2缓存读取 1.简介 STL容器中提供的list容器也是一种顺序容器&#xff0c;底层实现方式是带头双向链表&#xff0c;这种实现方式能比单链表更高效的访问数据。 下面围绕部分重要接口…...

Lua和JS的继承原理

JavaScript 和 Lua 都是动态语言&#xff0c;支持面向对象编程&#xff08;OOP&#xff09;&#xff0c;但它们的 继承机制 实现方式不一样。下面分别介绍它们的继承实现原理和方式&#xff1a; &#x1f536; JavaScript 的继承机制 JavaScript 使用的是 基于原型&#xff08…...

UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误

提问 UE5报错如图。解析原因 回答 你遇到的这个错误提示是&#xff1a; “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…...

resolvers: [ElementPlusResolver()] 有什么用?

resolvers: [ElementPlusResolver()] 是配合特定自动化导入插件&#xff08;如 unplugin-vue-components 和 unplugin-auto-import&#xff09;使用的配置项&#xff0c;其核心作用是‌实现 Element Plus 组件库的按需自动导入‌。 具体来说&#xff1a; 自动导入组件 (对应 …...

Redis(02)Win系统如何将Redis配置为开机自启的服务

一、引言 Redis 是一款高性能的键值对存储数据库&#xff0c;在众多项目中被广泛应用。在 Windows 环境下&#xff0c;为了让 Redis 能更稳定、便捷地运行&#xff0c;将其设置为系统服务并实现自动启动是很有必要的。这样一来&#xff0c;系统开机时 Redis 可自动加载&#xf…...

05 APP 自动化- Appium 单点触控 多点触控

文章目录 一、单点触控查看指针的指针位置实现手势密码&#xff1a; 二、多点触控 一、单点触控 查看指针的指针位置 方便查看手势密码-九宫格每个点的坐标 实现手势密码&#xff1a; 执行手势操作&#xff1a; 按压起点 -> 移动到下一点 -> 依次移动 -> 释放&am…...

Three.js进阶之音频处理与展示

引擎在对音频处理提供了丰富的接口&#xff0c;本文展示两个音频处理示例。 一、声音可视化 Three.js中的声音可视化是以视觉为核心&#xff0c;以音乐为载体&#xff0c;为音乐提供直观的视觉呈现。通过对音乐数据的分析并结合开发需求&#xff0c;能实现酷炫的视觉效果。在…...

Git Patch 使用详解:生成、应用与多提交合并导出

在多人协作、代码审查、离线提交或跨仓库迁移的场景中&#xff0c;git patch 是非常实用的技术。本文将系统地介绍如何使用 Git 的补丁机制导出和应用修改内容。 &#x1f4d6; 什么是 Git Patch&#xff1f; 严格来说&#xff0c;git patch 并不是一个 Git 命令&#xff0c;而…...