学习笔记-沁恒第五讲-米醋
一,设置音量
上次
这次
#include "uart.h"
#include "debug.h"
void audio_init()
{
Usart3_Init();
}
void audio_play(u8 num)
{
u8 string[]={0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef};
u8 i;
for(i=0;i<7;i++)
{
USART_SendData(USART3,string[i]);
while( USART_GetFlagStatus(USART3, USART_FLAG_TC)==0 );
}
}
void audio_yinliang(u8 yinliang)
{
u8 string[]={0x7e,0x04,0x31,yinliang,0x04^0x31^yinliang,0xef};
u8 i;
for(i=0;i<6;i++)
{
USART_SendData(USART3,string[i]);
while( USART_GetFlagStatus(USART3, USART_FLAG_TC)==0 );
}
}
二,要delay,不然会跳过 audio_play(2);
中间没有断,下一条指令收不到
audio_yinliang(20);
Delay_Ms(10);
audio_play(2);
这两函数本质都是:通过串口三,往DR写入一串数据
void audio_play(u8 num)
{
u8 string[]={0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef};
u8 i;
for(i=0;i<7;i++)
{
USART_SendData(USART3,string[i]);
while( USART_GetFlagStatus(USART3, USART_FLAG_TC)==0 );
}
}
void audio_yinliang(u8 yinliang)
{
u8 string[]={0x7e,0x04,0x31,yinliang,0x04^0x31^yinliang,0xef};
u8 i;
for(i=0;i<6;i++)
{
USART_SendData(USART3,string[i]);
while( USART_GetFlagStatus(USART3, USART_FLAG_TC)==0 );
}
}
三,AS608指纹识别模块用户手册 - 看电压,接线
- 看怎么接线,电压规格
红色:VIN
黄线:Tx
白线:Rx
黑线:GND
WAK:随便接个GPIO(七,怎么检查模块上有无指纹)
供电Vt:供几伏就是几伏,但高了可能会烧
四,AS608是不是好的:用上位机验证
验证AS608本身 和 AS608的串口 是好是坏
带上位机,用上位机测试:用串口收发(封装好了各种收发的数据包,还有图形界面化)
先接线
Usb转TTL模块(CH340可能会有问题,还得是CH341)
打开串口
获取(指纹)图像,看看获取成功没
五,拿到一个传感器,无手册(不知道数据包是什么),只有上位机
(疑问:指纹模块收到指纹数据,发给上位机,收发数据包什么格式?)
解决方法1:
下载一个串口监控精灵:看到上位机和指纹模块之间的通信
解决方法2:
面包板从硬件上直接截取中间发送的数据去监控
- 抄个串口7:Tx是PC2,Rx是PC3
- 怎么检查模块上有无指纹:
按下时,才触发一下,手指触摸到指纹模块,引脚就是高电平,上面没手指,就是低电平
八,AS608波特率可调,初始115200
九,串口七输出的同时,但因为我看不到,在用串口一打印出来,看看到底发了啥
点开SSCOM,选择WCH-Link,用单片机的串口一调试:因为复杂数据包的收发,一定要实时看到,
十,串口七发送字符串,手动给长度好一点
检查’\0’,停止发送:遇到这个就只发送{1,2,3}String[]={1,2,3,0,5,6};
然后printf的0也打印不出来(认为检测到’\0’),0后面的也丢了
数组首地址 数组长度
void uart7_send_string(u8* string,u8 len)
{
u8 i;
for(i=0;i<len;i++)
{
USART_SendData(UART7,string[i]);
while( USART_GetFlagStatus(UART7, USART_FLAG_TC)==0 );
}
printf(“%s\r\n”,string);printf的0也打印不出来(认为检测到’\0’),0后面的也丢了
}
解决方法:
//打印出来:可以看到
void usart1_send_string(u8* string,u8 len)
{
u8 i;
for(i=0;i<len;i++)
{
USART_SendData(USART1,string[i]);
while( USART_GetFlagStatus(USART1, USART_FLAG_TC)==0 );
}
}
//发给指纹模块:你看不到
void uart7_send_string(u8* string,u8 len)
{
u8 i;
for(i=0;i<len;i++)
{
USART_SendData(UART7,string[i]);
while( USART_GetFlagStatus(UART7, USART_FLAG_TC)==0 );
}
usart1_send_string(string,len);串口一打印出来,看看串口七到底发了啥
}
- 单片机收到的数据包,不定长,怎么确定数据包接收完成,什么时候让接收指针清零,(疑问:AS608收到单片机发的不定长数据,是怎么接收的?)
解决方法:超时解析
如果10ms没接收到新字符,说明这数据包发完了
u8 uart7_rec_string[20]={0};
u8 uart7_rec_index;
u8 uart7_rec_tick;(每1ms++)
/*串口7中断*/
void UART7_IRQHandler(void)
{
u8 temp=0;
if(USART_GetITStatus(UART7, USART_IT_RXNE) != RESET)
{
ps_wait_flag=0;
if(uart7_rec_tick>10)uart7_rec_index=0;
temp=USART_ReceiveData(UART7);
uart7_rec_string[uart7_rec_index]=temp;
uart7_rec_index++;
uart7_rec_tick=0;
}
USART_ClearITPendingBit(UART7, USART_IT_RXNE);
}
十二,AS60x指纹识别SOC用户手册V10 - 具体的指令
十三,指纹模块大概内部结构
buffer1
传感器 暂存区 flsh指纹库
buffer2
十四,录入指纹流程:(也可以只存一次到buffer1,不融合,直接存到flash指纹库里)
按两次指纹 登录一个模板存于 flash 指纹库
手指放传感器上:
第一次:
能调用函数PS_GetImage,传感器上的指纹 读取到 暂存区(数字量)
PS_Genchar暂存区指纹的图像数据 转换成 指纹特征数据:
存在buffer1
第二次(两次存的一样)
能调用函数PS_GetImage,传感器上的指纹 读取到 暂存区(数字量)
PS_Genchar暂存区指纹的图像数据 转换成 指纹特征数据:
存在buffer2
发注册模板指令Godo_RegModel:
把buffer1,buffer2里的指纹特征融合,融合后存在buffer1或buffer2
发存储模板指令Godo_StoreChar 参数:BufferID=2(融合后存在buffer2的情况):
存储的指令:融合后的指纹特征 存到 flash库里
十六~二十一:
录入图像 PS_GetImage
生成特征 PS_GenChar
void PS_RegModel()特征文件合并
PS_StoreChar()模板文件存到 PageID 号 flash 数据库位置。
都是
给发送数据包格式,写函数
给接收数据包格式,调试,AS608返还的数据正确与否
十五,从传感器读入 现场指纹 搜索从 10—100 的指纹库区间
buffer1/2里面的指纹特征数据,在flash指纹库里搜索,
有匹配的会显示匹配的,还有匹配得分
十六,录入图像 PS_GetImage:
探测手指,探测到后录入指纹图像存于 ImageBuffer。返回确认
码表示:录入成功、无手指等。
包长度 = 包长度至校验和(指令、参数或数据)的总字节数,包含校验和,但不
包含包长度本身的字节数。
#include "debug.h"
#include "uart.h"
void as608_init()
{
Uart7_Init();
}
/*从传感器上读入图像存于图像缓冲区*/
void PS_GetImage()
{
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x01,0x00,0x05};
uart7_send_string(string,12);
}
十七,验证指纹模块 返还的数据 正确不正确(与PS_GetImage的应答包对比)
delay一下,把时间错开,不然速度太快,基本上同一时间写入串口一
串口助手哪里,会打印在同一行
调试过程:
PS_GetImage();把数据包(在串口一上打印出来)写入DR,发给指纹模块
Delay_Ms(1000);延时1s打印
usart1_send_string(uart7_rec_string,15);把指纹模块返还的数据打印在串口1上
查错方法:
先写出数据 从发到收 的流程
void PS_GetImage()
{
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x01,0x00,0x05};
uart7_send_string(string,12);字符写入DR
}
/*串口7中断*/
void UART7_IRQHandler(void)
{
u8 temp=0;
if(USART_GetITStatus(UART7, USART_IT_RXNE) != RESET)
{
在这里显示一个数字:看能不能进中断
进不了:指纹模块没返还数据,但是:接线正常,数据发送正常
错误原因:波特率
ps_wait_flag=0;
if(uart7_rec_tick>10)uart7_rec_index=0;
temp=USART_ReceiveData(UART7);
uart7_rec_string[uart7_rec_index]=temp;
uart7_rec_index++;
uart7_rec_tick=0;
}
USART_ClearITPendingBit(UART7, USART_IT_RXNE);
}
十八,生成特征 PS_GenChar:
将 ImageBuffer 中的原始图像生成指纹特
征文件存于 CharBuffer1 或 CharBuffer2
包长度 = 包长度至校验和(指令、参数或数据)的总字节数,包含校验和,但不
包含包长度本身的字节数。
void PS_GenChar(u8 buffer)
{
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x04,0x02,buffer,0x00,0x01+0x00+0x04+0x02+buffer};
uart7_send_string(string,13);
}
十九,验证指纹模块 返还的数据 正确不正确(与生成特征 PS_GenChar的应答包对比)
调试过程:
获取指纹,生成特征存在buffer1
PS_GetImage();把数据包(在串口一上打印出来)写入DR,发给指纹模块
Delay_Ms(1000);延时1s打印
usart1_send_string(uart7_rec_string,15);把指纹模块返还的数据打印在串口1上
Delay_Ms(1000);
PS_GenChar(1);缓存区1
Delay_Ms(1000);
usart1_send_string(uart7_rec_string,15);
Delay_Ms(1000);
二十,void PS_RegModel()将 CharBuffer1 与 CharBuffer2 中的特征文件合并生成
模板,结果存于 CharBuffer1 与 CharBuffer2
void PS_RegModel()
{
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x05,0x00,0x09};
uart7_send_string(string,12);
}
调试过程:
获取指纹,生成特征存在buffer1
...
获取指纹,生成特征存在buffer2
...
Godo_RegModel();
Delay_Ms(1000);
usart1_send_string(uart7_rec_string,15);
Delay_Ms(1000);
串口助手显示:
第一次PS_GetImage();
返回值
存在buffer1里面
返回值
第二次PS_GetImage();
返回值
存在buffer2里面
返回值
void PS_RegModel
返回值
二十一,PS_StoreChar(): 将 CharBuffer1 或 CharBuffer2 中的模板文件存到 PageID 号 flash 数据库位置。
void PS_StoreChar(u8 addr)
{
0x00,addr位置号:只用低八位
0x00,0x01+0x00+0x06+0x06+0x02+0x00+addr校验和,加起来一般<0xff,只用低八位
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x06,0x06,0x02,0x00,addr,0x00,0x01+0x00+0x06+0x06+0x02+0x00+addr};
uart7_send_string(string,15);
}
调试过程:
获取指纹,生成特征存在buffer1
...
获取指纹,生成特征存在buffer2
...
将 CharBuffer1 与 CharBuffer2 中的特征文件合并生成 模板,结
果存于 CharBuffer1 与 CharBuffer2
...
PS_StoreCha(12);
Delay_Ms(1000);
usart1_send_string(uart7_rec_string,15);
Delay_Ms(1000);
二十二,搜索指纹 PS_Search: 以 CharBuffer1 或 CharBuffer2 中的特征文件搜索整个
或部分指纹库。若搜索到,则返回页码。
void PS_Search()
{
缓存区号直接不当参数,直接默认buffer2,0x02
起始页(startpage) :直接从0x00,0x00开始搜
页数(Pagenum)(结束页码) :搜到0x00,0xff 一共256
校验和 :0x01,0x00,0x08,0x04,0x02,0x00,0x00,0x00,0xff,0x01相加=0x10e
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x08,0x04,0x02, 0x00,0x00, 0x00,0xff, 0x01,0x0e};
uart7_send_string(string,17);
}
二十三,WAK:随便接个GPIO(接PA1)
怎么检查模块上有无指纹:
按下时,才触发一下,手指触摸到指纹模块,引脚就是高电平,上面没手指,就是低电平
/*初始化*/
void As608_Gpio_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
二十四,开始整体写代码
u8 mode;
//模式,0主页,1修改密码没有解锁管理员权限,2修改密码模式解锁了管理员权限
//3录入卡片,没有解锁管理员权限 4录入卡片,解锁了管理员权限
//5录入指纹,没有解锁管理员权限 6录入指纹,解锁了管理员权限
u8 as608_store_index=1
as608_proc()放调度器里,没20ms执行一次
void as608_proc()
{
手指放上去,只执行一次,不然会多次检查(按下触发)
变化了,在进来
//按下,抬起 都会进入
as608_proc_falg=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
if(as608_proc_falg==as608_proc_falg_old)return;
as608_proc_falg_old=as608_proc_falg;
//按下进入
if(as608_proc_falg==0)return;
if(mode==6)添加指纹的模式
{
PS_GetImage();//从指纹传感器获取图像到暂存区
Ps_Wait();//等待接收到数据包
PS_GenChar(1);生成特征
Ps_Wait();//等待接收到数据包
PS_GetImage();//从指纹传感器获取图像到暂存区
Ps_Wait();//等待接收到数据包
PS_GenChar(2);生成特征
Ps_Wait();//等待接收到数据包
PS_RegModel();合并特征
Ps_Wait();//等待接收到数据包
PS_StoreChar(as608_store_index);保存进flash指纹库,位置号0~255
as608_store_index++;第一次指纹存在1,第二次指纹存在2,
as608_store_index初始值1
Ps_Wait();//等待接收到数据包
audio_play(21);
mode=0;
}
if(mode==0)
{
PS_GetImage();//从指纹传感器获取图像到暂存区
Ps_Wait();//等待接收到数据包
PS_GenChar(2);生成特征
Ps_Wait();//等待接收到数据包
PS_Search();搜索
Ps_Wait();//等待接收到数据包
uart7_rec_string[13]搜索后,AS608返还得分
if(uart7_rec_string[13]>50)//匹配
{
audio_play(16);
lock_flag=0;//开门
show_flag=1;//显示汉字们已开启
}
else
{
audio_play(17);
}
}
}
感觉可以优化一下Ps_Wait() 直接延时到 收到完整数据包后,
//中断七收到AS608返还的第一个字符,就跳出Ps_Wait()
//万一刚进入Ps_Wait(),就收到字符,那岂不是 没有延时的话,瞬间跳出来
//所以最少执行一次Ps_Wait(),延时200ms(延时低的话:会降低指纹解锁成功率)
void Ps_Wait()
{
ps_wait_flag=1;
do
{
Delay_Ms(200);
}
while(ps_wait_flag);
}
/*串口7中断*/
void UART7_IRQHandler(void)
{
u8 temp=0;
if(USART_GetITStatus(UART7, USART_IT_RXNE) != RESET)
{
ps_wait_flag=0;
if(uart7_rec_tick>10)uart7_rec_index=0;
temp=USART_ReceiveData(UART7);
uart7_rec_string[uart7_rec_index]=temp;
uart7_rec_index++;
uart7_rec_tick=0;//1ms的计时变量
}
USART_ClearITPendingBit(UART7, USART_IT_RXNE);
}
二十五,清空指纹库 PS_Empty
: 删除 flash 数据库中所有指纹模板
void PS_Empty()
{
u8 string[]=
{0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x0d,0x00,0x11};
uart7_send_string(string,12);
}
相关文章:
学习笔记-沁恒第五讲-米醋
一,设置音量 上次 这次 #include "uart.h" #include "debug.h" void audio_init() { Usart3_Init(); } void audio_play(u8 num) { u8 string[]{0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef}; u8 i; for(i0;i<7;i) { USART_Se…...
骁勇善战的量化利器:多因子模型【量化理论】
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 风险模型雏形 股票因子受多种因素影响,其价格由多种因素决定,所谓的多因子策略就是要发掘诸如此类的因子,以一种合理的方…...
Android Loader机制解析
参考: Android Loader 机制...
使用Docker部署SearXNG
SearXNG 搜索引擎 SearXNG 是一个整合了超过70个搜索服务结果的免费的私有互联网搜索引擎,用户不会被网站跟踪或被建立档案进行特征分析,良好地保障了用户的隐私。知识库可以有效地弥补大模型的知识欠缺问题,但依旧无法补充或弥补知识库和大…...
C# ConcurrentQueue 使用详解
总目录 前言 在C#多线程编程中,数据共享如同走钢丝——稍有不慎就会引发竞态条件(Race Condition)或死锁。传统Queue<T>在并发场景下需要手动加锁,而ConcurrentQueue<T>作为.NET Framework 4.0 引入的线程安全集合&a…...
armv7l
在 **ARMv7l** 中,最后的字符是字母 **“l”**(小写字母 “L”),而不是数字 **“1”**。 --- ### 1. **ARMv7l 的含义** - **ARMv7**:指的是 **ARM 架构的第 7 代版本**,是一种广泛应用于嵌入式系统&…...
spring中关于Bean的复习(IOC和DI)
文章目录 1.spring程序开发步骤1.1 导入spring开发的基本包坐标1.2 编写Dao接口和实现类1.3 创建spring核心配置文件1.4 在spring配置文件中配置UserDaoImpl1.5 使用Spring的Api获得Bean实例 2. Bean实例化的三种方式2.1 无参构造方法实例化2.2 工厂静态方法实例化2.3 工厂实例…...
Docker内存芭蕾:优雅调整容器内存的极限艺术
title: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…...
一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格,用于比较Flask中的…...
【蓝桥杯单片机】客观题
一、第十三届省赛(一) 二、第十三届省赛(二)...
QT中经常出现的用法:组合
在 C 中,一个类包含另一个类的对象称为组合( Composition )。这是一种常见的设计模式,用 于表示一个类是由另一个类的对象组成的。这种关系通常表示一种 " 拥有 " ( "has-a" )的关系。…...
下载CentOS 10
1. 进入官网:https://www.centos.org/ 2. 点击右上角的Download进入下载页面。 3. 选择对应的CPU架构,点击ISOs下面的Mirrors开始下载。...
第9章:LangChain让大模型结构化输出
文章详细介绍了LangChain4j中如何使用结构化输出(Structured Outputs)。主要内容包括: JSON Schema:通过指定JSON Schema,LLM可以生成符合结构的输出。工具(Tools):通过工具调用实现…...
ES6 新特性,优势和用法?
ES6 新特性,优势和用法? ES6(ECMAScript 2015)引入了许多新特性,这些特性让 JavaScript 变得更加强大、简洁和易于使用。下面为你详细介绍一些常见的 ES6 新特性、它们的优势以及用法。 1. 块级作用域:le…...
简说spring 的设计模式
spring 的设计模式(23种…) (面试题)说说BeanFactory和FactoryBean的实现原理和区别? spring 中你还知道哪些设计模式?? 1.简单工厂模式 实质: 由一个工厂类根据传入的参数,动态决…...
【 Avalonia UI 语言国际化 I18n】图文结合教学,保姆级教学,语言国际化就是这么简单(.Net C#)
完整项目地址 github : https://github.com/Crazy-GrowUp/AvaloniaI18nTest/tree/master gitee :https://gitee.com/jack_of_disco/avalonia-i18n-test 0.项目新建 Properties 文件夹 对应的项目配置文件里面就会增加 <Folder Include"Properties\" /> 1.项…...
Spring Boot 日志管理(官网文档解读)
摘要 本篇文章详细介绍了SpringBoot 日志管理相关的内容,文章主要参考官网文章的描述内容,并在其基础上进行一定的总结和拓展,以方便学习Spring Boot 的小伙伴能快速掌握Spring Boot 日志管理相关的内容。 日志实现方式 Sping Boot 的日志管…...
Nginx学习笔记:常用命令端口占用报错解决Nginx核心配置文件解读
Nginx 1. 基础命令1.1 重新加载systemd配置1.2 停止Nginx服务1.3 启动Nginx服务1.4 重启Nginx服务1.5 查看Nginx服务状态1.6 测试配置和重载Nginx 2. 额外命令2.1 启用开机自启2.2 禁用开机自启2.3 强制关闭所有Nginx进程 3. Nginx端口占用解决方案3.1 查找占用端口8090的进程3…...
【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…...
高清下载油管视频到本地
下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…...
网络运维学习笔记 021 HCIA-Datacom新增知识点02 SDN与NFV概述
SDN与NFV概述 经典IP网络是一个分布式的、对等控制的网络。 每台网络设备存在独立的数据平面、控制平面和管理平面。 设备的控制平面对等的交互路由协议,然后独立的生成数据平面指导报文转发。 它的优势在于设备与协议解耦,厂家间的兼容性较好且故障场景…...
《论模型驱动架构设计方法及其应用》审题技巧 - 系统架构设计师
软件测试工程师软考论文写作框架 一、考点概述 “模型驱动架构设计及其应用”这一论题,主要考察了考生对模型驱动架构设计(MDA)这一先进软件设计方法的理解与应用能力。论题涵盖了MDA的基本概念、核心要素、实施流程及在实际项目中的应用等…...
【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型
线程同步 条件变量 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 例如:一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这…...
Docker Mysql 数据迁移
查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…...
四步彻底卸载IDEA!!!
各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好,我们今天来学习四步彻底卸载IDEA!!! 首先我要提醒各位 如果你想删除 IDEA 相关…...
HTTP实验(ENSP模拟器实现)
HTTP概述 HTTP(HyperText Transfer Protocol,超文本传输协议),设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP定义了多种请求方法,常用的包括: GET:请求资源。 POST&…...
【网络安全】常见的web攻击
1、SQL注入攻击 定义: 攻击者在HTTP请求中注入恶意的SQL代码,当服务器利用参数构建SQL语句的时候,恶意的SQL代码被一起构建,并在数据库中执行。 示例: 用户登录: 输入用户名xx, 密码 or 1 …...
登录-05.JWT令牌-介绍
一.JWT令牌 JWT令牌是一种简洁的、自包含的格式,用于在通讯双方之间以json数据格式安全的传输数据。说白了,JWT令牌就是将json格式的数据进行封装,从而实现安全传输。 所谓简洁,就是指JWT令牌就是一个简单的字符串。 所谓自包含…...
K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解
#作者:朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一:使用配置文件设置密码1.3、方案二:使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…...
Spring框架基本使用(Maven详解)
前言: 当我们创建项目的时候,第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷,应该引入更多的管理工具,帮我们管理。 Maven的出现帮我们大大解决了管理的难题!! Maven…...
