自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 盗用cookie的目的和防盗cookie的手段

前提虽然通过使用springsecurity我们防御了会话固定攻击,但是如果黑客等待合法用户登录系统之后,再从合法用户浏览器中拿到名字为JSESSIONID的cookie,然后放入黑客自己的浏览器的cookie中,这样以来当黑客带着盗窃来的JSESSIONID访问系统时,后端系统会根据JSESSIONID找到对应的session,就会把该次请求当成是认证通过的用户发送的请求;这样黑客就可以为所欲为了。实践如下图:经过上图的实践,证明我的分析是合理的,只要能拿到认证通过的用户的cook

2020-10-27 23:08:12 9557

原创 SpringSecurity如何防御会话固定攻击

前提会话固定攻击就是因为会话不变,给了黑客可乘之机;黑客将自己访问系统时的JSESSIONID发给系统用户,让系统用户“被迫”使用该JSESSIONID来访问系统,如果用户在JSESSIONID的有效期内登录了系统,就会使对应的session变为认证通过的session,从而黑客再次访问系统时,也会被系统当成认证通过的用户。注意有两个要点:1:系统用户带着黑客发给自己的JSESSIONID访问系统;(可以将JSESSIONID放入请求头中,也可以将JSESSIONID拼接在url的后面)2:

2020-10-27 19:00:28 2343

原创 对session会话固定攻击的理解

前提浏览器端的sessionId和服务器端的session是对应的,在两者都不过期的情况下,他们之间的对应关系是不变的;黑客就是利用这一特性,将自己的sessionId发给系统的信任用户,当信任用户登录系统后,就可以把该sessionId对应的session变成完成认证的状态;这样以来,系统就把黑客当成了那个信任用户了。举例会话固定攻击的流程是这样的,以淘宝为例:攻击者自己可以正常访问淘宝网站,在访问的过程中,淘宝网站生成了一个session,并把sessionId返回给攻击者。 攻击者利

2020-10-27 13:19:37 2522

原创 对session和cookie的理解

两者都存在有效期的说法我们第一次访问系统后端时,后端会生成一个session来为本次请求服务,并把session的id返回浏览器端,存在名字为JSESSIONID的cookie中;后端生成的session存在有效期的说法,好像默认是30分钟,可以通过设置指定有效时间;浏览器中的cookie也存在有效期的说法,默认是关闭浏览器后cookie过期,也可以通过设置来指定有效时间;两者的对应关系后端的session和前端cookie中的sessionid是对应的,两者任意一方失效,就会导致对应不上,

2020-10-27 13:18:28 2242

原创 jasypt加密器的设置原理

第一步、pom中引入所需要的依赖第二步、在启动项目的时候会加载如下方法该方法的大致意思是:1:从配置文件中获取jasypt.encryptor.bean的值,如果获取不到,则使用默认值jasyptStringEncryptor2:如果配置文件中配置了jasypt.encryptor.bean,则isCustom为true,反之false;意思就是看我们是否在配置文件中指定了自己配置的加密器3:拿得到的customEncryptorBeanName和isCustom,创

2020-10-23 17:17:37 2205

原创 chrome安装vue-devtools调试工具(绝逼有效)

步骤一、到github下载/克隆安装包:git clone https://github.com/vuejs/vue-devtools(无论是下载还是克隆安装包,最重要的一点就是:根据以上地址默认进入后,看到的是dev分支下的代码(如下图),在该环境的代码中执行npm run build会报错;所以一定要记得切换到master分支的代码;如果是克隆,则在克隆后,通过执行git checkout master命令来切换到master分支;如果是下载,则选择了master后,在点击后侧的downl

2020-09-25 22:51:13 542 1

原创 vue-router中引入vue组件的两种方式

前提在vue的路由配置文件(routers.js)中,有如下两种引入组件的方式:一:调用时间require: 运行时调用,理论上可以运用在代码的任何地方import:编译时调用,必须放在文件开头二:加载效率1、懒加载:component: resolve => require(['@/view/index.vue'], resolve)用require这种方式引入的时候,会将你的component对应的组件分别打包成不同的js,加载的时候是按需加载,只用访问这个路由网址时才

2020-09-22 20:21:57 4069

原创 有关vuex的访问路径

前提首先区分模块类型和命名空间类型(1)主模块(全局命名空间)(2)子模块(全局命名空间)(3)子模块(局部命名空间)一、在vuex外部访问访问state:访问[1]中的时,直接$store.state.name;访问[2][3]中的时,$store.state.模块名.name;即为此时不按命名空间来区分,按模块名来区分 访问getters:访问[1][2]中的时,直接$store.getters[‘name’];访问[3]中的时,$store.getters[‘命名

2020-09-22 09:00:59 929

原创 SpringBoot获取配置文件资源的三种方式

前言springboot获取配置资源(yml和properties两种配置文件都适用),主要分3种方式:@Value、 @ConfigurationProperties、Enviroment对象直接调用。1:@ConfigurationProperties2:@Value3:通过注入Enviroment对象然后直接获取配置文件中内容三种方式的对比1:只是在某个业务逻辑中需要获取一下配置文件中的某个值来使用,则可以使用@Value或Environment;2:如果需要获

2020-09-19 09:26:24 580

原创 SpringBoot关于slf4j的相关优化设置

springboot内置了slf4j日志框架,我们可以直接去使用,不需要添加依赖;只需要在配置文件中进行所需要的的配置

2020-08-24 22:34:58 753

原创 CentOS下将一个FastDFS中存储的文件迁移到另一个FastDFS中

前提老环境:tracker 192.168.216.132:22122storage 192.168.216.132:23000新环境:(未启动tracker和storage)tracker 192.168.216.133:22122storage 192.168.216.133:23000迁移步骤1、修改新环境下storage的配置文件/etc/fdfs/storage.conf将tracker_server改为老环境下tracker的ip地址和端口tracker_serv

2020-08-21 15:36:18 937

原创 CentOS下安装fastDFS

一:所需要的安装包libfastcommonV1.0.7.tar.gz (FastDFS依赖程序)FastDFS_v5.05.tar.gz (FastDFS安装包)fastdfs-nginx-module_v1.16.tar.gz (nginx和fastdfs的桥梁插件模块)nginx-1.8.0.tar.gz (nginx安装包,用于做文件请求http代理服务器)二:创建安装目录fastdfs三:通过rz命令将安装包都上传到安装目录中如果没有安装rz命令,可以通过yum -

2020-08-14 16:04:32 177

原创 Activiti中的互斥网关、并行网关、兼容网关、事件网关

前提流程中的网关用于控制顺序流的分支和汇合,如果不需要进行顺序流的控制,则可以不使用网关。一:互斥网关(单行网关)1、互斥网关就好像一个人走到了一个岔路口,只能选择一条路前进,至于选择哪条路由顺序流的条件决定;也就是从互斥网关输出的顺序流1和顺序流2都被设置的有条件;(1)、如果只有一个顺序流的条件满足要求,则就走这个顺序流;(2)、如果有多个顺序流的条件满足要求,则哪个顺序流的定义在流程文件中靠前,走哪个顺序流;(3)、如果没有顺序流的条件满足要求,则抛出异常。二:并行网关

2020-07-10 23:22:48 8139 1

原创 世人不熟知的dependencies和dependencyManagement的区别

前提当我们将项目分成很多模块的时候,我们使用Maven管理项目非常方便。一般情况下,我们抽出一个父模块,然后将其他模块定义成子模块。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果;所以选择通过父模块来管理子模块的公共的依赖。也即为在父模块中定义公共依赖和其版本,在子项目中继承这些公共依赖供自己使用。父模块管理公共依赖可以通过在父模块的pom文件中使用以下两个元素:dependencies和dependencyMan

2020-07-09 22:57:12 1066

原创 linux下查看activiti流程图乱码

现象当系统部署到windows下时,查看流程图正常:当系统部署到linux下时,查看流程图出现乱码:问题1:在生成流程图时,设置的是宋体;InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivitis,highLightedFlows,"宋体","宋体",processInstanceId,null, 1.0);2:但是linux下没有字体库,更没.

2020-06-29 11:50:52 1022

原创 linux下Mysql的大小写敏感

现象windows开发环境下一切正常,部署到linux服务器上后,启动系统报以下错误:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'soc.QRTZ_LOCKS' doesn't exist错误信息:找不到soc数据库下的QRTZ_LOCKS表!但是我打开navicat看到soc库下是存在qrtz_locks表的,而且同样的数据库和代码在windows下是没问题的。问题1:mys

2020-06-24 21:36:47 419

原创 Linux的cp复制和mv移动命令的超详细介绍

Linux的复制和移动命令

2020-06-07 18:43:31 1391

原创 CentOS7下安装tomcat的超详细说明以及同一个服务器安装多个tomcat

1:可以将windows上下载好的安装包通过rz命令上传到linux上的指定文件夹中,也可以通过wget命令在线下载;wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz2:解压压缩包3:将解压后的文件夹转移到/usr/local下(软件一般都安装到这里),改名为tomcat94:修改Tomcat的环境变量Tomcat需要jdk才能运行,上面

2020-06-06 21:09:32 307

原创 CentOS7下安装jdk8的超详细说明

1:将在windows上下载好的jdk1.8通过rz命令上传到linux指定的文件夹下,/usr/software:2:在software目录下解压压缩包3:删除安装包,将解压后的文件夹移到/usr/local下(软件一般都安装在这里),并改名为java84:将jdk路径加入环境变量中,使用vim /etc/profile命令修改环境变量5:将以下代码假如到环境变量中,jdk路径为自己的安装路径#java environmentexport JAVA_HOME=/us

2020-06-06 20:19:43 175

原创 Activiti任务参数和流程参数的对比

前言Activiti的参数有两种类型,一类是流程参数,一类是任务参数;流程参数是通过RuntimeService服务组件设置,在设置的过程中需要传入执行流ID;任务参数是通过TaskService服务组件设置,在设置的过程中需要传入任务ID;所以我们可以形象的认为流程参数是和执行流绑定到了一起,任务参数是和任务绑定到了一起。从作用域那里说明情况,做出对比...

2020-06-06 14:14:49 662

原创 Activiti任务参数的设置方式和作用域

前言Activiti的参数有两种类型,一类是流程参数,一类是任务参数;流程参数是通过RuntimeService服务组件设置,在设置的过程中需要传入执行流ID;任务参数是通过TaskService服务组件设置,在设置的过程中需要传入任务ID;所以我们可以形象的认为流程参数是和执行流绑定到了一起,任务参数是和任务绑定到了一起。流程参数的理解可以查看这篇文章《Activiti流程参数的设置方式和作用域》一:任务参数的设置方式流程启动之后,当走到某个任务节点时,用taskService.setVari

2020-06-04 14:17:24 2118

原创 Activiti流程参数的设置方式和作用域

流程参数有两种设置方式:1:启动流程实例时,设置;应该相当于setVariable方式?2:用setVariable或者setVariableLocal的方式,依靠执行流ID,设置。当流程实例只有一个执行流时,即为只有主执行流时,无论是以setVariable还是以setVariableLocal的方式来存入流程参数,则都可以以getVariable和getVariableLocal的方式获取到;当流程实例中除了主执行流外,还有子执行流时;当在主执行流中存入流程参数,则无论以何种方式存入(s

2020-06-03 10:30:18 3261

原创 IDEA安装Activiti插件并解决乱码问题

一:通过IDEA直接安装插件1:打开IDEA,File->Settings->Plugins;搜索actiBPM,点击Installed,安装成功重启IDEA即可;如下图:2:重启IDEA之后,即可看到可以创建bpmn文件了二:通过从官网下载jar包安装插件1:有些版本的IDEA,可能从Plugins里搜索actiBPM,找不到结果,如下图:2:需要从IDEA官网下载actiBPM.jar包,IDEA官网:https://plugins.jetbrains.com

2020-06-02 13:19:58 726 2

原创 使用HTTPS操作gitlab时的账户认证问题(gitlab开启了双因子认证)

前言操作github/gitlab上的仓库时,可以使用SSH或者HTTPS(HTTP)两种协议,SSH协议无论操作github还是gitlab都一样,方式为:《使用SSH协议操作github上的仓库》,而使用HTTPS协议操作github和gitlab时,在账户的认证方面不太一样;HTTPS方式操作github时,认证时就使用账号和密码,方式为:《使用HTTPS协议操作github上的仓库》,而操作gitlab上的仓库时,认证方面不一样问题1:当你第一次操作gitlab上的仓库时,会提示输入账号

2020-05-22 17:24:22 4324

原创 TortoiseGit的SSH Client是个坑

前言现在比较流行使用git来进行代码的管理,公司内部一般使用gitlab来搭建Git服务器(中央服务器),而我们需要在自己的电脑上安装git(本地git服务器),并安装一个TortoiseGit客户端。我们可以使用SSH或者HTTPS(HTTP)两种协议来操作中央服务器上的repository。问题1:当通过SSH协议方式操作中央服务器上的repository时,出现以下问题;问题的大概意思是:没有可用的支撑验证方法(服务器发送公钥)2:我们都知道如果要使用SSH协议来操作github或

2020-05-22 15:53:40 2355

原创 Springboot热部署的简单实现

前提热部署:即为在开发过程中,当改变程序中的代码或者配置文件时,不需要程序员自己手动重启应用,而由开发工具(IDEA)自动重启应用,方便、快捷。一:修改pom.xml配置文件<dependencies> <!-- spring-boot-devtools 支持热部署--> <dependency> <groupId>org.springframework.boot</groupId>

2020-05-20 11:54:54 305

原创 对git、github、gitee、gitlab的理解

一:git二:github三:gitee四:gitlab

2020-05-15 14:45:40 912

原创 mysql主从复制的简单配置示例

一:主(master)服务器的配置1、修改配置文件my.cnf[mysqld]datadir=/usr/local/mysql/dataport = 3306sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESsymbolic-links=0max_connections=400innodb_file_per_table=...

2020-04-24 22:37:17 184

原创 CentOS7安装Proxychains实现linux代理

git clone https://github.com/rofl0r/proxychains-ng.gitcd proxychains-ng./configuremake && make installmake install-configcd .. && rm -rf proxychains-ngvim /etc/proxychains.conf ...

2020-04-24 20:24:34 5353

原创 CentOS7下安装mysql的超详细说明

1、使用wget命令从官网上下载mysql安装包,或者下载到windows本地,然后使用rz命令上传到linux上。wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz(可以从mysql官网根据自己的需要选择所需要的版本)2、解压下载的安...

2020-04-23 23:39:47 278

原创 RabbitMQ如何保证消息的可靠性

一:介绍消息的可靠传输一般是指业务系统接入消息中间件时需要考虑的问题。二:消息传输示意图三:消息可能丢失的几种情况(1)、消息从生产者传输到中间件的过程中,可能网络断开,消息丢失;(2)、消息到达中间件的交换器后,路由不到匹配的队列中,消息丢失;(3)、消息在队列中还未被消费者消费时,中间件服务器宕机,消息丢失;(4)、消息从队列传输到消费者的过程中,可能网络断开,...

2020-04-22 23:57:13 319

原创 RabbitMQ的延迟队列

一:介绍延迟队列中存放的是延迟消息,所谓的“延迟消息”就是指当消息发送后,并不能被消费者立即消费,而是等待特定时间后,消费者才能拿到这个消息进行消费。二:原理RabbitMQ并没有直接提供对应的延迟队列,而是通过DLX(死信交换器)和TTL(消息过期时间)来达到延迟队列的目的。假如需要一个延迟1min的延迟队列,则可以将一个队列的过期时间设置为1min,并给该队列设置DLX(死信交...

2020-04-21 22:16:49 175

原创 RabbitMQ的死信队列

RabbitMQ的死信队列为什么需要死信队列?消息什么时候加入死信队列?有什么作用?

2020-04-21 13:32:02 272

原创 RabbitMQ的备份交换器

什么时候需要备份交换器?备份对列中的消息什么时候取出来?

2020-04-21 11:31:47 218

原创 RabbitMQ的整个通信过程

一:根据上图标注的序号来依次介绍每一步要做的事情:1:生产者生产消息后,将消息发布给交换器黑EX;2:交换器黑EX根据路由规则将消息路由到队列黑queue;3:Broker再将队列黑queue中的消息投递给订阅该队列的消费者,或者是消费者从队列黑queue中获取消息;4:给黑EX绑定一个备份交换器绿EX,当到达黑EX的消息不能被正确路由到任何队列时,被发送给备份交换器绿EX;...

2020-04-21 10:26:38 336

原创 Linux的压缩和解压命令

Linux命令的格式为:命令 参数 对象1、命令:无论压缩还是解压,命令都是tar2、参数:压缩是c,解压是x,它两是对立的;显示过程是v,最后指定文件名是f,但是还有一个参数有三种情况,(1)不指定:文件格式是tar,(2)z:文件格式是tar.gz(3)j:文件格式是tar.bz23、示例如下:tar cvf 1.tar 文件夹1(将文件夹1压缩成1.tar)tar x...

2020-04-10 11:43:45 113

原创 RabbitMQ消费消息的两种模式:推和拉

前言 在rabbitmq中有两种消息处理的模式,一种是推模式/订阅模式/投递模式(也叫push模式),消费者调用channel.basicConsume方法订阅队列后,由RabbitMQ主动将消息推送给订阅队列的消费者;另一种是拉模式/检索模式(也叫pull模式),需要消费者调用channel.basicGet方法,主动从指定队列中拉取消息。推模式:消息中间件主动将消息推送给消...

2020-04-10 11:33:05 11146 2

原创 对RabbitMQ消息队列的理解

一、RabbitMQ的消费模式有两种,一种是推,一种是拉推:RabbitMQ会将队列中的消息推给消费者。拉:消费者从队列中主动拉取消息,但是每次只能拉取一条。二:消息确认当消费者无论通过推模式还是拉模式消费消息后,都应该给RabbitMQ一个确认消息,告诉RabbitMQ自己已经消费了消息,让RabbitMQ从队列中将消息删除;当然了消费者也可以不给RabbitMQ回复确认消息,这...

2020-03-25 18:49:14 589

原创 自己总结的pycharm超常用快捷键

Ctrl+D 将一行代码或者选中的代码块新增一份Ctrl+Y 删除一行代码或者选中的代码块Ctrl+Z 撤销刚执行的操作Ctrl+Shift+Z 反撤销Ctrl+F 在当前页面查找Ctrl+Shift+F 在全局查找Ctrl+R 在当前页面替换Ctrl+Shift+R 在全局替换Ctrl+N或者Ctrl+Shift+N按照文件名全局查找文件Ctrl+正斜杠 注释...

2020-03-21 17:59:56 205

原创 ElasticSearch中的_source和store:既生瑜何生亮

先介绍一个_source和store: (1):_source默认是打开的,将原始文档以JSON的形式存储在_source字段中,在lucene中_source只是一个字段,即在一个字段中存储了一个文档中所有字段的值。_source是es层面的设置,相当于给lucene多加了一个字段用于存储整个原始文档的值。(2):字段...

2020-03-20 09:22:37 990

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除