<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wangpf2011的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wangpf2011</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangpf2011]]></copyright><item><title><![CDATA[TLS协议四次握手原理详解，密钥套件采用DH密钥交换算法]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/147230636</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/147230636</guid><author>wangpf2011</author><pubDate>Mon, 14 Apr 2025 19:04:22 +0800</pubDate><description><![CDATA[第一步客户端会发起一个消息，携带了TLS的版本号，客户端随机数，密码套件Cipher Suites。第二步服务器会把一大堆东西传给客户端，其中包括TLS版本、服务器的随机数、选择的密码套件Cipher Suite、服务器证书Certificates、服务器公钥PubKey。第三步客户端会传一个PubKey给服务器，实现密钥交换算法，发送加密数据，服务端验证。第四步服务端发送加密数据，客户端验证，握手完毕。]]></description><category></category></item><item><title><![CDATA[js中(双感叹号)符号的用法解读]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/124590268</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/124590268</guid><author>wangpf2011</author><pubDate>Thu, 05 May 2022 15:48:15 +0800</pubDate><description><![CDATA[最近在前端vue工程开发中看到一个js用法，对js初学者来说这是一个容易混淆的地方，趁此机会研究研究!!的用法。


if (!!getItem('Authorization')) {
console.log('已登录')
}

1、!的用法

!可将变量转换成布尔类型，对null、undefined和空字符串取反后均为true，对于非空字符串或非null对象，执行!运算后则为false，例如：
!null = true;
!undefined = true;
!'' = true;
!'wang' = f]]></description><category></category></item><item><title><![CDATA[http请求头origin、referer和host区别]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/122309575</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/122309575</guid><author>wangpf2011</author><pubDate>Tue, 04 Jan 2022 19:14:15 +0800</pubDate><description><![CDATA[1. Host

描述请求将被发送的目的地，包括且仅仅包括域名和端口号。 HTTP/1.1 的所有请求报文中必须包含一个Host头字段，且只能设置一个。

2. Origin

请求头origin表明了请求来自于哪个站点。包括且仅仅包括协议、域名和端口，并不包含任何路径信息。经常用于CORS请求或者POST请求，可以看到response有对应的header：Access-Control-Allow-Origin。

@CrossOrigin(origins="http://wx.xxxx.com:80")
]]></description><category></category></item><item><title><![CDATA[Apache Log4j2.x RCE命令执行漏洞攻击原理及修复措施]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/122114584</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/122114584</guid><author>wangpf2011</author><pubDate>Thu, 23 Dec 2021 19:19:48 +0800</pubDate><description><![CDATA[截止2021.12.20，短短几天Log4j2.x已经连发3个版本，用以修复RCE命令执行漏洞，Log4j2漏洞总体来说是通过JNDI注入恶意代码来完成攻击，具体的操作方式有RMI和LDAP等。



一、攻击原理

以RMI为例，简单阐述下该漏洞的攻击原理：

1、攻击者首先发布一个RMI服务，此服务将绑定一个引用类型的RMI对象。在引用对象中指定一个远程的含有恶意代码的类。

2、攻击者再发布另一个恶意代码下载服务，此服务可以下载所有含有恶意代码的类。

3、攻击者利用Log4j2的漏洞注入RMI调用，]]></description><category></category></item><item><title><![CDATA[Docker之常用命令总结]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/121745477</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/121745477</guid><author>wangpf2011</author><pubDate>Mon, 06 Dec 2021 14:03:26 +0800</pubDate><description><![CDATA[以下为实际项目中常用docker命令的总结，命令中镜像名为oss/jeeopen:1.0，容器名为jeeopen，每个命令的具体OPTIONS说明请自行搜索查看。

1、Docker基本命令

显示 Docker 系统信息，包括镜像和容器数

docker info

显示Docker版本信息

docker version

磁盘空间大小总览

docker system df –v

宿主机与容器之间拷贝文件

docker cp redis-3.0.7.tar.gz jeeopen:/home/jap]]></description><category></category></item><item><title><![CDATA[Docker实战：利用Docker创建Percona（MySQL）集群]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/121336517</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/121336517</guid><author>wangpf2011</author><pubDate>Mon, 15 Nov 2021 16:01:17 +0800</pubDate><description><![CDATA[Percona是MySQL的分支版本，性能超越标准的MySQL。本文以构建Percona集群为例进行Docker实战讲解，具体步骤如下：

1、获取Percona（MySQL）数据库的image


docker pull percona/percona-xtradb-cluster:latest

2、重命名本地镜像


docker tag percona/percona-xtradb-cluster:latest pxc

3、网络相关配置

默认情况下容器与容器、容器与宿主机的网络是隔离开来的，Do]]></description><category></category></item><item><title><![CDATA[BPM引擎Activiti6.0任务撤回实现方法]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/119836876</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/119836876</guid><author>wangpf2011</author><pubDate>Sat, 21 Aug 2021 11:27:49 +0800</pubDate><description><![CDATA[当前使用的BPM引擎为Activiti6.0，客户需求是流程发起人能将整个流程撤销，对于某个流程节点，办理人可以撤回已经办理的任务，同时前提是该任务节点的下个节点未被办理。

1、流程撤销

首先说下发起人对整个流程的撤销，直接删除流程，传入流程实例ID，结束一个流程。执行此方法后，流程实例的当前任务act_ru_task会被删除，流程历史act_hi_taskinst不会被删除，并且流程历史的状态置为finished完成。


runtimeService.deleteProcessInstance(in]]></description><category></category></item><item><title><![CDATA[MySQL大数据量处理常用解决方案]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/119597161</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/119597161</guid><author>wangpf2011</author><pubDate>Wed, 11 Aug 2021 10:26:49 +0800</pubDate><description><![CDATA[1、读写分离
读写分离，将数据库的读写操作分开，比如让性能比较好的服务器去做写操作，性能一般的服务器做读操作。写入或更新操作频繁可以借助MQ，进行顺序写入或更新。
2、分库分表
分库分表是最常规有效的一种大数据解决方案。垂直拆分表，例如将表的大文本字段分离出来，成为独立的新表。水平拆分表，可以按时间，根据实际情况一个月或季度创建一个表，另外还可以按类型拆分。单表拆分数据应控制在1000万以内。分库分表后要注意对SQL语句的支持，稍不小心，可能就会造成业务数据混乱等问题。
3、数据缓存
使用缓存技术降低对数据]]></description><category></category></item><item><title><![CDATA[微服务架构设计之聚合模式和代理模式]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/118634976</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/118634976</guid><author>wangpf2011</author><pubDate>Sat, 10 Jul 2021 14:42:11 +0800</pubDate><description><![CDATA[1、微服务概念

微服务架构是一种架构风格与设计模式，具有如下优点：小而专，提倡将大的应用分割成一系列小的服务；高内聚，每个服务专注于各自单一的业务功能；独立运行，每个服务运行于独立的进程中，有清晰的服务边界；轻量级通讯，采用轻量级的通讯机制（Http/Rest）来实现互通、协作。



小而专，提倡将大的应用分割成一系列小的服务。比如将电商平台一个单体应用拆分成购物、交易、物流、商品，跨功能开发团队（特性团队）负责各自模块从需求、UI、设计、实施、运维全过程，快速交付用户价值。

高内聚，每个服务专注于各]]></description><category></category></item><item><title><![CDATA[SpringBoot技术剖析之Starter组件]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/118634417</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/118634417</guid><author>wangpf2011</author><pubDate>Sat, 10 Jul 2021 14:03:59 +0800</pubDate><description><![CDATA[SpringBoot另一核心特性是Starter组件，Starter组件的出现极大简化了项目开发，例如在项目中使用的pom.xml文件下配置：


&lt;dependency&gt;
 &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
 &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
&lt;/dependency&gt;

SpringBoot就会自动关联w...]]></description><category></category></item><item><title><![CDATA[网络信息安全之请求重放校验、防会话重放攻击]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/113923721</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/113923721</guid><author>wangpf2011</author><pubDate>Sun, 21 Feb 2021 21:16:24 +0800</pubDate><description><![CDATA[上篇文章介绍了敏感数据如何加密传输，加密可以有效防止会话劫持，但是却防止不了重放攻击。重放攻击任何网络通讯过程中都可能发生，攻击者发送一个目的主机已经接收过的包，来达到欺骗系统的目的。这篇文件详细介绍下防止会话重放的方法和步骤，目的是防止会话请求数据包重放，保护目的主机免收攻击。

1、客户端身份认证或第一次访问时，向服务端请求当前系统时间systime；
2、客户端接收服务端返回的当前系统时间systime，并计算出与当前客户端时间clienttime的差值difftime=systime-clientt]]></description><category></category></item><item><title><![CDATA[网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/113133702</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/113133702</guid><author>wangpf2011</author><pubDate>Mon, 25 Jan 2021 19:30:15 +0800</pubDate><description><![CDATA[客户端通过http协议获取系统重要敏感信息时，很容易造成敏感信息泄露。攻击者可以利用收集的重要敏感信息有针对性的制定计划对系统进行攻击。如何防护呢？首先应根据业务特点定义出系统存储的敏感信息，另外敏感信息在存储、传输、显示时应进行加密或脱敏处理。

1、敏感数据上传

客户端将敏感数据加密后上传至服务端，敏感信息Data采用对称加密算法进行加密传输，对称加密密钥Key采用非对称加密传输。具体步骤如下所示。

1）服务端生成有效密钥对，并将PublicKey返回给客户端。公私钥在一个会话周期内有效，若重新登录]]></description><category></category></item><item><title><![CDATA[深入解析SpringBoot自动装配原理，轻松掌握SpringBoot核心功能]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/108252102</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/108252102</guid><author>wangpf2011</author><pubDate>Thu, 27 Aug 2020 08:39:52 +0800</pubDate><description><![CDATA[自动装配是SpringBoot的核心功能，它将开发人员从Bean的繁复配置中解脱出来。那么SpringBoot具体起什么作用呢？以Spring MVC为例，不采用SpringBoot时，需要配置视图解析器，文件解析器，请求适配器等各种Bean，如果采用SpringBoot，则只需集成spring-boot-starter-web依赖模块即可。同样如果使用数据库，在非SpringBoot工程中，我们需要配置dataSource、sessionFactory、transactionManager等各种Bean。]]></description><category></category></item><item><title><![CDATA[记一次由ehcache缓存引起的shiro登录信息变更失败的解决方案]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/107261878</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/107261878</guid><author>wangpf2011</author><pubDate>Fri, 10 Jul 2020 19:09:14 +0800</pubDate><description><![CDATA[问题描述：apache shiro是一个被广泛使用的安全层框架，用户的登陆/退出/权限控制/Cookie等功能都可以交给shiro来管理。项目开发中登录认证也是正是采用shiro进行管理的，由于shiro默认对ehcache的支持，所以shiro缓存管理我们采用了ehcache。最近测试中偶尔发现，在对登录用户所属机构信息进行变更后，再次登录系统用户所属机构信息竟然没有发生变化，经分析发现是ehcache缓存引起的，用户所属机构变更后并未同步/清空缓存的用户信息。解决问题关键是在合适时机清空登录用户的ehc]]></description><category></category></item><item><title><![CDATA[SpringBoot项目Redis两种实现Lettuce和Jedis比较]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/106451782</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/106451782</guid><author>wangpf2011</author><pubDate>Sun, 31 May 2020 10:19:41 +0800</pubDate><description><![CDATA[Jedis是直连模式，在多个线程间共享一个Jedis实例时是线程不安全的，可以通过创建多个Jedis实例来解决，但当连接数量增多时，物理连接成本就较高同时会影响性能，因此较好的解决方法是使用JedisPool。



Lettuce的连接是基于Netty的，连接实例可以在多个线程间共享，Netty可以使多线程的应用使用同一个连接实例，而不用担心并发线程的数量。通过异步的方式可以让我们更好地利用系统资源。

1、Jedis集成使用

1.1、pom.xml中添加redis相关依赖


&lt;dependen]]></description><category></category></item><item><title><![CDATA[学以致用Redis五种数据类型总结及应用场景]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/105397624</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/105397624</guid><author>wangpf2011</author><pubDate>Wed, 08 Apr 2020 21:52:44 +0800</pubDate><description><![CDATA[Redis常用数据结构有string，hash，list，set，zset，本文将就五种数据结构常用操作进行说明，并就典型应用场景进行举例。

1、Redis数据类型-String

String类型的数据存储是最简单的key-value存储，存储元素类型包含字符串（String）、数值（Number）、二进制（bit）三种类型。


	1.1、字符串（String）
	
	
	针对字符串常见操作...]]></description><category></category></item><item><title><![CDATA[微服务技术架构剖析及微服务带来的优势]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/103398736</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/103398736</guid><author>wangpf2011</author><pubDate>Thu, 05 Dec 2019 09:43:32 +0800</pubDate><description><![CDATA[框架之初为了快速迭代出产品，而选择简单的技术架构，构建单体应用。这些架构可以适应初期业务的快速发展，但是随着业务变得越来越复杂，就会发现这些架构越来越难支撑业务的发展，各业务模块相互调用，业务边界越来越模糊，同时对系统更正性、完善性、预防性等维护工作越来越难，往往牵一发而动全身，最终可能造成测试工作不足，上线后才发现各种bug。另外会出现在一个类中写好几千行代码，一个方法中到处都是if else语...]]></description><category></category></item><item><title><![CDATA[RocketMQ集群原理及双主双从集群搭建]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/103223414</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/103223414</guid><author>wangpf2011</author><pubDate>Sun, 24 Nov 2019 12:57:30 +0800</pubDate><description><![CDATA[RocketMQ的三种自带集群模式为：

（1）双MASTER : 优点是配置简单、快捷，但是一旦MASTER机器宕机或出现问题就无法提供服务；

（2）双MASTER双SLAVE同步双写： 比异步复制的性能差10%，但能保证数据不丢失；

（3）双MASTER双SLAVE 异步复制：性能最好，但是遇到突发情况会有少量数据丢失。



上图为双主双从集群原理图，其中Name Server是一个几乎...]]></description><category></category></item><item><title><![CDATA[数据库性能优化方案（2）--keepalived haproxy mycat的高可用方案]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/102666322</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/102666322</guid><author>wangpf2011</author><pubDate>Mon, 21 Oct 2019 16:46:09 +0800</pubDate><description><![CDATA[本文的前提是Mycat已经安装并配置完毕，Mycat已实现对MySQL的读写分离、主从切换，其对应服务器IP分布为172.19.166.238和172.19.166.239。在此基础上，本文继续讲解Keepalived+Haproxy+Mycat的高可用方案，利用Haproxy实现Mycat集群负载均衡，Keepalived保证Haproxy高可用。



Haproxy作为专门的负载均衡软件，可...]]></description><category></category></item><item><title><![CDATA[MySQL数据库性能优化（1）：数据库主从同步]]></title><link>https://blog.youkuaiyun.com/wangpf2011/article/details/101270256</link><guid>https://blog.youkuaiyun.com/wangpf2011/article/details/101270256</guid><author>wangpf2011</author><pubDate>Tue, 24 Sep 2019 10:45:44 +0800</pubDate><description><![CDATA[数据库主从复制是MyCat实现读写分离的基础，所以在实现MyCat读写分离前，先简要叙述MySQL数据库主从复制的配置方式。

数据库主从同步前提：

（1）准备两台服务器（主192.168.1.100，从192.168.1.200），分布安装并启动mysql服务；

（1）主从数据库服务器网络联通，能相互ping通；

（2）同步前主从数据库中数据要保持一致。

1、数据库Master设置

1...]]></description><category></category></item></channel></rss>