自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liangshitian的博客

个人博客

  • 博客(68)
  • 资源 (10)
  • 收藏
  • 关注

原创 SpringBoot集成shiro+redis+jwt多realm实现登录(支持密码、免密校验、多用户表校验)

本篇文章主要介绍 Shiro多realm,根据不同的登录类型指定不同的 realm。由于项目上需要支持原有的sys_user系统用户做登录验证,又要加上现在需要做微信端sys_wx_user的用户验证。实现的思路就是需要前端在请求头里加一个loginType字段来区分当前登录使用那个realm去做认证。而且这个多realm还可以做密码和免密校验。1、目前需要两个Realm,第一个是默认的系统认证(DefaultUserRealm.java)这里和正常的shiro认证逻辑一致,主要是验证sys_us.

2020-09-11 14:02:38 3818 2

原创 SpringBoot集成shiro+redis+jwt实现无状态授权验证

前言1.放弃Cookie,Session,使用JWT进行鉴权,完全实现无状态鉴权。2.JWT密钥支持过期时间;jwt作为创建验证token工具,并选择一种验证方式与算法。3.使用redis做缓存处理,缓存token等等登录信息,以实现单点登录与超时登录功能。4.密码加密(采用AES-128 + Base64的方式)。5.根据RefreshToken自动刷新AccessToken...

2020-01-03 11:04:35 33816 5

原创 docker安装mysql、nginx、redis、自建docker(Dockerfile )

Docker的应用场景 Web 应用的自动化打包和发布。 自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后台应用。 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 本文介绍记录了docker安装mysql、nginx、redis、自建docker(Dockerfile )...

2019-12-19 11:12:10 33268

原创 Canal集群搭建

springboot使用canal中间件

2023-10-25 15:25:46 188

原创 java 使用多线程处理业务逻辑和批量处理数据

将数据分批可以使用guava里面的工具类,pom中引入。

2023-04-27 18:48:59 1530 2

原创 shell脚本启动java程序

【代码】shell脚本启动java程序。

2023-04-25 18:47:47 1770 2

原创 Linux下mysql备份

定时脚本命名为mysqlbackup.sh。通过 crontab - e 添加任务。

2023-04-21 19:22:10 239

原创 离线安装docker,再安装mysql、Redis等应用

1、离线安装docker①、下载地址:https://download.docker.com/linux/static/stable/x86_64/②、复制docker-19.03.11.tgz到服务器上,解压:tar xzvf docker-19.03.11.tgz③、进入docker目录复制所有文件到/usr/bin目录下,目的/user/bin是环境变量目录cp docker/* /usr/bin/④、在/etc/systemd/system/ 创建docker.service.

2021-08-03 19:52:04 381

原创 Redis缓存穿透、缓存击穿、缓存雪崩

1、基本概念2、缓存穿透解决方案缓存空对象(代码接单,效果不好),导致大量的空对象数据 布隆过滤器(代码复杂,效果很好,一般使用这个) 原理 手写分布式的布隆过滤器①、比如根据用户ID查询用户的信息public RestResponse<User> getUserInfo(String userId) { //缓存空对象(代码接单,效果不好),导致大量的空对象数据 //先查询redis缓存 Object redisUser =

2021-02-22 18:00:53 260

原创 Java对接支付宝的支付、退款、提现

本篇主要是正对Java对接支付宝的常用功能,需要开通个人的沙箱环境和内网穿透(我用了阿里云服务器)。集成前提:开发者在集成和开发前需要了解一下常用的接入方式和架构建议,如下图所示:1、登录网页版的个人支付宝https://auth.alipay.com/login/ant_sso_index.htm2、进入研发服务进入沙箱环境3、通过开发平台去配置秘钥配置https://opendocs.alipay.com/open/200/1053114、配置yml文件和

2021-01-28 14:41:21 4360 4

原创 若依登录自定义扩展Springboot+security支持密码、验证码多种登录方式

若依开源框架登录使用的配置大部分都是security自定义的,目前希望在此框架基础上支持自定义的登录,如手机号+密码登录认证、手机号+短信验证码认证。1、自定义登录实现思路主要是实现继承DaoAuthenticationProvider类,重写additionalAuthenticationChecks方法,将通过密码标识来判断是不是需要验证密码和免密验证。2、继承DaoAuthenticationProviderpackage com.tuitui.framework.security.

2020-12-04 09:57:23 6943 7

原创 SpringBoot集成移动云MAS平台(SDK版本)

公司的一个街道项目的微信公众号需要发短信的验证码,需求原型如下图,对比了三大运营商,移动的云MAS平台,不需要硬件,直接联系移动客户经理注册即可,可以通过SDK,WebService,CMPP协议等方式进行发信操作,价格比联通贵一点点。1、下载SDK云MAS平台网址:http://mas.10086.cn/login下载上图中的这两个SDK的demo和接口文档,具体对接这里的接口文档描述的非常清楚,按照步骤操作就行了。2、申请测试账号在正式购买之前需要申请一个开发用的测试账号,申

2020-11-23 16:41:58 5679 4

原创 构建JDK8源码阅读环境

1、打开IDEA,创建一个普通的Java工程。选着好jdk,点击下一步不用选项,直接下一步完成2、导入源码由于我们创建项目时选择了JDK8版本,因此会自动配置好代码之间的依赖,我们需要做的就是将源码导入项目。JDK的源码位于JDK文件夹下的src压缩包里。进行解压到项目下的src目录下解压完成,可以直接阅读源码了。...

2020-11-11 17:11:26 1333

原创 SpringBoot整合kaptcha生成、校验验证码

项目中需要加入验证码校验,本文记录了验证码验证的验证码生成和校验过程,使用的是Google的 kaptcha 框架,kaptcha是非常好的工具。1、pom引入 <!--图片验证码--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId&gt

2020-11-10 14:49:31 1703 1

原创 SpringBoot集成Quartz实现定时任务

1、Quartz官网http://www.quartz-scheduler.org/Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作。 任务定义为标准Java组件的作业,它们实际上可以执行您可以编写的所有内容。 Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。Quartz的三要素Job : 具体要执行的业务逻辑,比.

2020-11-05 17:17:03 1573

原创 java8使用去重、判断、包含新增成list

1、字符串集合去重List<String> distinctList = list.stream().distinct().collect(Collectors.toList());2、根据对象属性去重 List<User> list = new ArrayList<>(); list.add(new User(1,"张三")); list.add(new User(1,"张三")); list.add(new User(2,"李四")); Li

2020-10-30 15:59:43 2594

原创 POI操作word填充数据

1、pom引入POI包 <!--poid--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17}</version> .

2020-10-28 15:30:45 3186

原创 Java使用aspose将Excel转为pdf文档

项目需求需要将Excel文件转换成pdf文档,网上教程找到相关资料,记录一下。1、引入aspose-cells-8.5.2.jar包、license.xml破解文件<dependency> <groupId>aspose-cells</groupId> <artifactId>aspose</artifactId> <version>8.5.2</version> <scope

2020-10-14 15:00:26 5128 8

原创 Springboot+Spring-Security+JWT实现登录和权限校验

JWT请查阅这篇文章介绍:https://blog.csdn.net/qq_33612228/article/details/108853525Spring SecuritySpring Security 是 Spring 全家桶中一个功能强大且高度可定制的身份验证和访问控制框架。与所有 Spring 项目一样,我们可以轻松扩展 Spring Security 以满足自定义要求。由于 Spring Security 功能十分强大,相比于其他技术来说很难上手,很多刚接触 Spring Securi

2020-10-12 15:47:49 3271

原创 Json Web Token(jwt)

1、什么是jwt目前流行的跨域认证解决方案,一种基于JSON的、用于在网络上声明某种主张的令牌(token),通过后台是否识别此令牌来保证安全性,负载中携带了用户的一些信息,减少数据库查询量(官网: https://jwt.io/)。2、jwt原理jwt = 头部(header)+载荷(payload)+签证(signature)1)header:JWT的header声明了2部分信息,类型和加密算法,{'typ':'JWT','alg':'HS256'}将其ba

2020-09-28 17:51:08 2047

原创 手把手教你使用java对接微信公众号-获取地理位置信息

公众号需要定位当前用户的地址位置,需要通过签名后返回的数据,前端将参数回调到微信服务器获取地理位置信息,官方文档说明(https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)。这里会告诉你对接JSSDK使用步骤。可以看出调用JSSDK需要后端提供四个参数: appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '',

2020-09-27 14:49:46 3934 1

原创 手把手教你使用java对接微信公众号-获取和自定义菜单

1、由于需要对接微信,开发的时候只能通过文档中的接口去创建菜单打开自定义菜单接口文档地址(https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html),我使用的是第二种方式创建,因为我要对接网页授权来做登录功能。2、详细阅读菜单创建接口可以看出我们需要的是“view”类型,那么我就用postman来创建,不用写代码了。3、通过APPID和appsecre

2020-08-31 12:37:13 3408

原创 java对接阿里云短信平台

1、使用自己的支付宝登录阿里云https://www.aliyun.com/,购买免费的短信服务。搜索“短信”找到图中的【三网合一】进入点击立即购买,你也可以买有费用的,我测试用就免费申请的(每个用户只能申请一次免费的)。点击“立即开通”支付成功后,点击“管理控制台”,可以看到自己的短信服务2、再次进入购买界面,查看短信接口的定义以及调用方式。本次案例是发送短信验证码,短信信息也是如此,换下接口和参数即可。3、编写代码需要pom引入一下http工具

2020-08-27 16:50:36 5414

原创 手把手教你使用java对接微信公众号-获取微信用户基本信息

1、登录自己测试公众号,找到“网页服务”中的“网页授权获取用户基本信息”;进入。2、看到接口文档的微信网页开发的步骤。以上实现获取用户信息有5步骤,但在实际使用中,我们只使用了(1、2 、4)三个步骤即可。3、首页实现第一步骤,写一个单点登录的页面。图中是前端页面第一步骤单点登录的地址,其中的scope、redirect_uri最为重要,一个是获取用户基本信息的权限,一个是微信端跳转到你登录页面,然后会带入code和state字段给我们的页面。编写我们登录页面基础逻辑是截取地

2020-08-27 14:42:45 6345 9

原创 手把手教你使用java对接微信公众号-接收和回复基本信息

文档中(https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html)已经告诉我们,当普通微信用户向公众账号发送消息时,微信服务器会把该消息封装成XML数据包通过POST的方式发送到开发者填写的URL上。我们设置的URL仅仅只有一个,上篇文章中是用来做接入验证的,当时是微信服务器发送GET请求过来,而现在是用来做消息处理的,此时微信服务器发送的是POST请求,因此想要区分开来应该做什么事情,只需要根据请求方式来判

2020-08-25 15:29:17 4565 4

原创 手把手教你使用java对接微信公众号-签名验证

1、进入微信公众号登录界面,先用自己的微信去注册服务号。登录地址:https://mp.weixin.qq.com。登录成功进入找到“开发”一栏,选择“基本配置”,填写服务器配置。我们在测试的时候可以通过申请测试号进行开发,开发完成后再切换到正式环境。2、登录微信官方文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html,选择“接口测试号申请”,然后登陆即可。..

2020-08-20 15:34:09 5788

原创 springboot集成ElasticSearch的查询添加demo

springBoot集成elasticsearch(下面简称es)有2种实现方案, 一种是基于Jest, 另一种是基于springDataElasticsearch, 我们此次整合采用后者实现。简单实现对es搜索引擎, 添加索引数据, 查询数据等操作。1、pom中elasticsearch依赖springboot版本是2.1.8,此本版内部依赖的ES客户端版本是6.4.3,由于前面的安装是7.4.2版本,所以demo依赖的包是7.4.2。自定义ES版本号,指定下就行: <pro

2020-07-26 16:56:40 4171 3

原创 Elasticsearch的ik分词器安装和验证

1、什么是分词器 把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。2、es内置分词器standard:默认分词,单词会被拆分,大小会转换为小写。 simple:按照非字母分词。大写转为小写。 whitespace:按照空格分词。忽略大小写。 stop:去除无意义单词,比如the/a/an/is… keyword:不做分词。把整个文本作为一个单独的关键词。3、ik中的两种分词器ik_max_wor...

2020-07-24 16:08:44 8368

原创 Elasticsearch7.4.2批量导入数据,语法使用demo

1、导入批量数据通过此链接的数据拷贝出(https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json)将json数据复制到kibana,使用kibana控制台执行保存到es。#批量导入测试数据POST /bank/account/_bulk...

2020-07-23 18:13:53 5729

原创 linux安裝Elasticsearch7.4.2和kibana7.4.2并配置

1、Elasticsearch下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-linux-x86_64.tar.gz2、将Elasticsearch压缩包上传到/lst/software,然后解压到/lsttar -avxf elasticsearch-7.4.2-linux-x86_64.tar.gz -C /lst3.进入解压目录,新建data目录cd /lst/elast

2020-07-21 11:50:48 4157

原创 docker安装Elasticsearch-7.4.2和kibana:7.4.2并配置

Docker的应用场景 Web 应用的自动化打包和发布。 自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后台应用。 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 1、docker拉取elasticsearch官方镜像//下载elasticsearch 存储和检索数据docker pull elasticsearch:7.4.22、docker拉取kibana官方镜

2020-07-20 19:06:20 4481 7

原创 java自定义校验注解

前言在日常的开发中可能会对手机号、邮箱、身份证号的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了。此文编写一个对应0,1值的校验。1、引入依赖<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version&

2020-07-17 11:04:15 4236

原创 vue脚手架进行模块化开发和elementUI快速开发

1、vue模块开发(前提:需要安装node.js和npm环境)1)安装webpack环境打开cmd,输入一下命令(-g 是全局安装):npm install webpack -g2)全局安装vue脚手架输入一下命令:npm install -g @vue/cli-init如果通过 vue -V,提示vue不是内部命令也不是外部命令,网上都说是系统环境变量配置的问题,可是我的vue.cmd文件都没有生成,所以用npm install -g vue-cli 命令安装后

2020-06-20 20:45:43 6900

原创 linux下nacos集群安装

1、下载nacos安装包官网地址:https://github.com/alibaba/nacos/tags,我下载的是1.2.1版本的。2、解压nacos-server-1.2.1.tar.gz3、执行conf目录下的nacos-mysql.sql文件4、拷贝一份application.properties文件配置该文件中的数据库连接,如下图5、再拷贝一份cluster.conf文件,并做节点配置。修改cluster.conf文件的内容,配置如下1

2020-06-08 15:30:45 10189

原创 基于zookeeper实现分布式锁(springboot整合)

1、分布式锁的实现方式大概有三种:基于关系型数据库(基于mysql数据库的分布式锁) 基于缓存(基于redis的redisson实现分布式锁) 基于zookeeper(本文讲解了基于zookeeper的分布式锁)2、安装zookeeper安装教程请参考:linux下zookeeper集群安装,有集群和单机安装配置。3、springboot集成实现3.1、pom引入 <!-- zookeeper 客户端 --> <dependen

2020-06-04 17:27:55 12656

原创 linux下zookeeper集群安装

1、前言  在大型分布式集群系统中,Zookeeper是一个非常重要的分布式协调服务组件;其应用场景非常广泛,如做服务的注册中心、实现分布式锁以及集群Master选举等等。本文讲述的,就是Zookeeper集群的搭建。Zookeeper本身是由Java语言开发的一个相对独立的基础分布式组件,因此,Zookeeper的安装除了需要安装JVM外,不再需要依赖其它环境2、环境安装我们先在一台虚拟机中安装配置好单个ZK服务,成功后我们克隆出多个虚拟机,就无需在其他虚拟机中重新下载安装zookeeper等

2020-05-29 15:45:14 13957 6

原创 springboot整合rabbitmq(发送基本和对象数据)

1、前言SpringBoot整合RabbitMQ非常简单,官网有对应的starter,可以自动装配。本文使用概述了最简单的MQ信息发送和接收。2、环境安装首先得有一个RabbitMQ的环境,我是用了docker安装,非常简单。点击 Queues、Exchanges 栏目,即可看到我们创建好的队列、交换机。3、pom引入 <!--RabbitMQ--> <dependency> <groupI

2020-05-26 16:31:47 15568

原创 基于mysql数据库的分布式锁

1、分布式锁的实现方式大概有三种:基于关系型数据库(本文讲解了基于mysql数据库的分布式锁) 基于缓存(基于redis的redisson实现分布式锁) 基于zookeeper2、思路利用主键唯一的特性,如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功,那么我们就可以认为操作成功的那个线程获得了该方法的锁,当方法执行完毕之后,想要释放锁的话,删除这条数据库记录即可(性能上依赖数据库)。3、创建表CREATE TABLE `data_base_lock` (

2020-05-24 17:48:21 14672 2

原创 springboot整合redisson实现分布式锁

1、为什么要用分布式锁?在一些高并发的场景中,比如秒杀,抢票,抢购这些场景,都存在对核心资源,商品库存的争夺,控制不好,库存数量可能被减少到负数,出现超卖的情况,或者 产生唯一的一个递增ID,由于web应用部署在多个机器上,简单的同步加锁是无法实现的,给数据库加锁的话,对于高并发,1000/s的并发,数据库可能由行锁变成表锁,性能下降会厉害。这个时候就需要用分布式锁了实现分布式锁的方式很多,我们今天就用redis的分布式锁,redisson也是官方比较推荐的。当然我们其实也可以自己用redis的setn

2020-05-24 17:01:10 16434 1

转载 如何保证库存在高并发的场景下是安全的

一、 问题一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品。如何保证库存在高并发的场景下是安全的?(1)不多发(2)不少发二、 下单的步骤(1)下单(2)下单同时预占库存(3)支付(4)支付成功真正减扣库存(5)取消订单(6)回退预占库存三、 什么时候进行预占库存?...

2020-05-07 16:46:26 15378

aspose8.5.2

项目需求需要将Excel文件转换成pdf文档,网上教程找到相关资料,记录一下,以后再找就方便了,也分享出来。

2020-10-14

seata-server-lst.zip

seata-server-1.1.0.zip版本的github下载太慢,上传到这里提供下载,方便大家使用。eata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2020-06-10

springbootmybaties.zip

本文使用的是用xml配置的方式,用注解的方式虽然简单,但是对于复杂的sql写出来还是感觉没那么简洁、快速;在正常的业务中,大部分都是要求使用复杂的sql来完成业务的需要。好了,下面直接上代码了。

2020-01-14

source.zip

去年的时候公司的一个项目需要配置多数据源,当时使用的是springMVC框架,网上找了一些资料,花费了一些时间也整合了;今年公司使用了新的框架,现在的项目基本都是基于SpringBoot开发。以下来记录下自己使用SpringBoot整合MybatisPlus和配置多数据源。

2020-01-07

SpringBoot+shiro+redis+jwt .zip

当我们开发需要简单的鉴权功能时,springboot更快捷、简单的集成JWT,使得项目更加简洁(Compact)、自包含(Self-contained)、安全(security);鉴权的流程为下。

2020-01-03

SpringBootDemo.zip

SpringBoot +Redis +RabbitMQ 实现高并发限时秒杀,高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。

2019-12-30

SpringBootSocket.rar

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。举例来说,我们想要查询当前的排队情况,只能是页面轮询向服务器发出请求,服务器返回查询结果。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此WebSocket 就是这样发明的。

2019-12-22

springBoot.rar

随着人工智能和大数据分析技术越来越广泛,众多的生活场景都存在着这些技术的身影,本文通过注册百度云用户,通过springboot集成离线的SDK,实现java的人脸识别功能。

2019-12-18

springBootMybatisPlus.rar

SpringBoot集成mybatis-plus,可提供给初学者进行学习。源码提供了简单的分页查询功能,支持自行写sql。操作简单,配置简单。

2019-12-18

nginx安装教程

安装nginx教程,内容详细,步骤详细且简单,欢迎各位同行业一起来学习。

2018-06-27

空空如也

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

TA关注的人

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