自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java中文验证码实现

中文验证码实现,有几点需要注意:一是生成的时候图片大小需要大一些,否则字体显示会非常不清晰,比如我设置的宽高就是700*200二是Linux上使用时需要安装对应的字体,否则中文文字显示不出来。目前实现了背景颜色随机、文字颜色及干扰线等颜色随机等;生成效果图如下所示:随机生成第二次效果如下:package com.huashi.water.core.module.base.service;import com.huashi.water.core.common.service.RedisS

2021-03-23 20:40:36 786

原创 微信授权登录实现分析

微信授权登录包含有几种场景:一是公众号;二是H5页面;三是其它APP;本文主要讲述公众号及H5页面的实现,关于其它APP的应用,请参考官方文档。1. 公众号与H5公众号应用其实也是H5页面,不过是H5页面在微信浏览器中打开。但这两种方式有着本质的区别。其最关键的不同在于,通过公众号打开H5页面可以直接弹出微信授权登录对话框,如下所示:而使用其它浏览器只能打开一个二维码的页面:在手机端要使用微信扫码,这个体验是非常之差劲的,只可惜微信目前并未对这种方式进行改进。对于H5页面如果想要兼容常规浏览器和

2020-12-29 16:10:41 1780 1

原创 Vue现有项目Nuxt改造实例解析

本文主要讲述如何将一个现有的vue-cli项目按nuxt进行SSR改造。nuxt官网文档有新项目使用nuxt的相关指南,如有相关需要的可以直接转移到官网了解nuxt官网地址:nuxt官网注意官网上相关文档基本都是英文的,如想看中文文档可以在w3cSchool上找到,地址:https://www.w3cschool.cn/nuxtjs/nuxtjs-b4kl36fw.html 1. 背景今年自己完成了几个项目的开发,基本都是基于自己总结的一整套前后端基础应用来进行开发的,其中前端使用VUE+ele

2020-12-27 19:34:00 3960 4

原创 ORA-00119: invalid specification for system parameter LOCAL_LISTENER异常解决

安装Oracle时,本地创建了多个数据库,但在创建第二个库时出现了问题,发现第一个库连接不上去了。从oradim.log文件中看到以下异常:D:\programs\oracle_data\product\11.2.0\dbhome_1\bin\oradim.exe -startup -sid test -usrpwd * -log oradim.log -nocheck 0 Fri May...

2020-05-08 17:10:12 2921

原创 Excel读写操作抽象简述

1、背景很多项目里面都需要对Excel进行操作,这个时候我们一般使用POI工具,其中使用最多的三个场景如下:生成导入模板:需要为生成的Excel增加各种校验,如下拉、长度限制、单元格类型等;只需要增加标题行,无数据行;导入数据:需要从单元格中读取各种类型的数据,如数字类型、文本类型、日期类型等;用户上传的文件格式可能比较混乱,如预期是文本格式的单元格实际格式是数字,在读取时...

2020-02-24 19:04:13 291

原创 Redis操作无响应问题处理记录及总结

项目中某个功能使用了Redis做缓存,使用代码如下: Map<String, String> map = new HashMap<>(16); configItems.stream() .map(ProductionLineConfigItemDTO::getDeviceId) .filter(Objects::nonNull) ...

2019-09-18 12:48:09 1971

原创 JavaFX表格选择单元格时高亮所在行功能实现

使用JavaFX表格进行数据展示时,想要将当前所选择的单元格所在的行进行高亮,经过研究,实现方案见下文。主要的思路:为Table定制TableCell,在TableCell中的RowIndex发生变更后,检查Cell所在行是否被选中,根据是否选中来设置单元格的背景色。但按这种方式有一个问题,TableCell的RowIndex时,一般只有表格的数据发生变化的时候才会变更,如果直接在监听RowI...

2019-09-09 18:22:02 1492 1

原创 编程基础-代码优化示例一(Builder模式、Stream及面向对象)

编码其实是一个可以做到非常精致的事情,每次回头看自己以前写的代码,总是觉得可以采用更好的方式去实现。从好的方面来说自己一直在进步,但从差的方面来说就是自己一直都做的不够好。在日常编码过程中有时候灵机一动的念头,可能就是对于解决某些场景非常有用的方案,因此我决定将一些编码过程中的优化记录下来,总结后真正的变成自己的东西,这样在往后的编码过程中就可以做到更好。当然代码优化是一个永无止境的事情,总结也...

2019-09-02 15:06:34 536

原创 IDEA插件开发总结

前言IDEA是一个非常强大的工具,对于提高编程效率有非常大的帮助。当然他也不是全能的,有时候的一些需求他可能并没有办法直接满足,这个时候一般就需要通过他的插件来完成了。目前Idea已经有了非常多的插件可以使用,但有时候可能现有插件并不能满足自己的需求,我就遇到了两个,如生成Bean的Setter方法时,想要同时生成void类型的Setter以及返回Bean类型的Setter方法,并未找到好的插...

2019-07-17 16:38:06 5161 1

原创 Idea插件开发-JPA、MyBatis实体类代码生成器插件

使用Spring开发项目的过程中,习惯于使用JPA进行表的创建、数据的更新等操作,但JPA对于复杂查询的支持比较差,因此很多时候又会同时引入mybatis来进行复杂查询。再加上实体对象与传输对象分离,在开发一个简单的表单查询维护功能时,也需要创建很多的类来完成对应功能的开发,如DTO对象、数据库操作类、DTO与实体类转换器、操作服务接口、操作服务接口实现类、控制器等。每次我们新创建一个实体类,都...

2019-07-16 18:21:26 5597

原创 Spring Security OAuth专题学习-授权服务源码解读

授权服务主要完成以下四个核心功能:客户端授权关系管理;接收用户或客户端登录请求,生成accessTokenToken存储Token校验本文将从源码层面分析授权服务如何实现上述四个功能。关于Spring Oauth2的一些基础概念及示例,可参考:http://liumoran.cn/topic/myTopics/11. 概述授权服务包含有以下几个关键类:EnableAutho...

2019-05-24 09:37:01 1766

原创 Spring Security OAuth专题学习-资源服务源码解读

通过Spring Security OAuth专题学习的前面四篇文章(http://liumoran.cn/topic/myTopics/1),对于Spring Security OAUth的基本使用已经有了一些基本的概念。然而对于资源服务及授权服务生效原理,仍旧一无所知。接下来将从源码层面对Spring Security OAuth相关组件进行分析与学习。Spring Security OA...

2019-05-14 09:22:26 498 1

原创 Spring Boot+Vue+Spring Security OAuth2的前后端分离项目实现研究

业余在开发一个Spring Boot+Vue+Spring Security OAuth2的一个前后端分离项目,其中遇到不少如跨域、OPTIONS请求处理、PreAuthorize注解无效、Token失效处理等问题,记录如下。在此项目中,资源服务与授权服务在同一应用中,使用端口8081;前端应用使用端口8080。前端使用axios进行ajax调用。关于Spring Security OAuth...

2019-05-09 19:12:14 17739 4

原创 【问题处理】Spring Boot中kafka消息能力不足现象及问题解决

【本文首发于个人网址:liumoran.cn】kfaka中主要包含生产者与消费都对象,生产者往队列中推送消息,而消费者则从队列中读取并处理消息。生产者推送的过程较为简单,而对于消费者来说,情况复杂且容易受各种因素影响。1. 消费过程消费过程如下所示:Created with Raphaël 2.2.0开始是否有消息?读取消息处理消息提交offset是否停止?结束等待等待超时yesnoyes...

2019-04-02 19:27:44 2587 1

原创 Spring Boot中如何使得fastjson支持JDK8新时间对象LocalDate、LocalDateTime

在Spring Boot中使用fastjson来处理JSON格式转换时,默认情况下是不支持JDK1.8中的LocalDateTime及LocalDate等时间对象的。为使其支持这些对象,可以定义相关的ObjectDeserializer来处理,并将定义的对象通过ParserConfig.getGlobalInstance().putDeserializer方法将其作为全局配置。实现如下:@Co...

2019-03-26 18:00:48 5814

原创 Spring Security OAuth专题学习-授权码模式及简化模式实例

本文是Spring Security OAuth2学习系列文章中的第四篇;主要讲解授权码模式(AuthenticationCode)及简化模式(Implicit)的使用。关于密码模式、客户端模式及Spring Security OAuth2的一些基础知识,请移步本博客文章清单进行查看。1. 简介授权码模式主要使用在客户端与授权、资源服务器不在同一公司的情况;在这种场景下,客户端并不是可信的,...

2019-02-27 18:42:27 1761

原创 Spring Security OAuth专题学习-密码模式JWT实现

本文是Spring Security OAuth2学习系列文章中的第三篇;主要讲解密码模式下如何使用JWT管理Token。关于密码模式非JWT的实现示例及Spring Security OAuth2的一些基础知识,请移步本博客文章清单进行查看。1. JWT是什么JWT是JSON Web Token的缩写。它与标准Token不一样的地方在于,在Token中它附加存储了很多额外的信息,如Toke...

2019-02-27 10:40:20 2325

原创 Spring Security OAuth专题学习-密码模式及客户端模式实例

在https://blog.csdn.net/icarusliu/article/details/87911093一文中,介绍了OAuth的一些背景知识;本文将编写一个简单的示例,演示授权模式中的密码模式及客户端模式如何实现。本示例中涉及到的几个对象其关系如下图所示:密码模式一般用于用户对客户端信任度最高的情况下,因为客户端需要保存用户在授权服务器中的用户名及密码信息,客户端可以访问所有用户...

2019-02-25 13:48:28 1859

原创 Spring Security OAuth专题学习-背景

在公司项目中有使用到Spring Security OAuth2来对Spring Cloud集群的授权进行控制,为加深对这一技术的理解,自己花时间对OAuth的几个授权类型进行了学习,并记录如下。本文主要介绍一些oauth2相关的背景知识及常见概念。后续将针对每一种授权模式进行实战演练。1. 产生背景在传统前后端不分离的WEB应用中,一般通过Session的方式来保存用户登录状态;每一个请求...

2019-02-25 09:17:43 357 1

原创 Spring Cloud配置文件加载简述

Spring Cloud中配置文件的加载机制与其它的Spring Boot应用存在不一样的地方;如它引入了bootstrap.properties的配置文件,同时也支持从配置中心中加载配置文件等;本文主要聚焦在这些配置文件加载的优先级及覆盖关系的控制上,对于帮助理解Spring Cloud的配置文件加载方式有一定的帮助。1. bootstrap上下文Spring中加载的配置文件是分层级的;S...

2018-12-29 10:42:18 1738

原创 nginx安装启动及动静分离、https配置

nginx主要有两个作用:作为负载均衡服务器,可以将请求转发到后台多个Tomcat服务器;可以专门处理静态页面,动态的JSP等放在Tomcat中处理;Win下的Nginx下载:http://nginx.org启动:下载后解压压缩包,然后直接双击nginx.exe;此时不会出现任何提示,实际上已经在后台启动了。通过以下 命令可以查看启动的实例:tasklist /fi "image...

2018-12-28 11:33:00 413

原创 Java8日期类型常见用法总结

Java8新引入了一些日期、时间对象,这些对象与老的日期时间对象的使用上存在很大的不同,刚开始会很不习惯,但经过初步的使用后一定会更习惯使用这些新的API的,它使得对日期时间对象的操作上不会再如老的使用方式那样痛苦。首先需要明确的一个概念就是,Java8中将日期与时间对象区分开了。如果只需要使用年、月、日而不关注时间信息,可以直接使用LocalDate;如果需要关注时间信息,可以使用LocalD...

2018-12-13 10:05:03 1902

原创 通过训练将图像压缩到指定大小

最近在做一个东西,想要将图片压缩后存储到服务器上以节省空间。直接使用JDK中的类进行压缩处理,但发现压缩后的图片大小跨度区间较大。最终考虑在计算压缩比例时引入调整值,并对这个调整值进行训练,以尽量缩减压缩后大小与目标大小的差距。使用不同大小的图片进行训练后就可以得到一组调整值,最终在代码中可以直接使用这组结果来处理。而不是每次都需要重新训练。实现如下:package com.iroote...

2018-12-12 15:56:21 750

原创 JAVAFX开发的Redis客户端

未找到顺手的Redis客户端,便自己使用JavaFx开发了一个。 下载地址:https://pan.baidu.com/s/1ld5XSDnVOzh61v--WEzsPg界面如下:主要通过快捷键来操作;快捷键如下:CTRL+N:创建新连接;CTRL+E:切换连接;CTRL+F:跳转到输入框;(输入框中输入后直接按enter查找)输入框中按向下直接跳转到key的清单,选择某个Key后按...

2018-12-07 15:59:21 501 2

原创 kafka消费者构建未返回问题分析-线程池异常处理

在上文中,配置kafka参数时因为参数类型与kafka预期的类型不匹配而导致其抛出了ConfigException。但很奇怪的是,在日志中看不到这个异常的任何信息,因此也导致我一直没往这方面考虑,最终通过一步步调试才发现对构造函数的调用居然没有返回,并经过进一步的分析搞清楚了是因为参数类型不匹配而抛出了异常,但为什么这个异常信息未打印出来的问题也一直困扰着我。问题未搞清楚始终是块心病,因此对这块...

2018-12-04 09:58:45 541

原创 kafka消费问题处理记录

公司系统内部数据交换使用了kafka,最近发现有时会报以下异常:org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another membe...

2018-12-03 19:31:53 1308

原创 MVN指定打包需要包含的目录

在使用jpamodelgen生成源码后,源码生成的目录在target目录下; 如果此时又想使用mvn将项目打成jar包,那么生成的源码并不会打到JAR包中去。此时,需要在pom.xml文件中将该目录包含进去:&lt;resources&gt; &lt;resource&gt; &lt;directory&gt;src/main/java&lt;/directory&gt; &lt;/re...

2018-11-22 15:36:54 7354 1

原创 JavaFX开发的开发常用工具集——清单管理工具、命令行加强工具及HTTP调用工具

在软件开发过程中,经常会需要使用到一些工具,如清单管理、HTTP调用测试等,电脑上经常要装一堆的软件,而且这些软件经常不是很满足自己的使得习惯。作为一个开发人员,很自然的就想按自己的想法开发一些工具来供自己使用,因此这个工具集就因此而产生了,并且在使用过程中仍在不断优化与增加。目前包含了三个工具:一是定制化的清单管理工具;二是HTTP请求工具;三是Win命令行加强工具。全部都是使用JavaFX等...

2018-10-14 14:50:46 1738

原创 SpringBoot使用EnableWebMvc无法加载静态页面的问题解决

当在项目中使用EnableWebMvc注解时,默认情况下页面等静态资源没有办法访问到。前台将会报404,后台出现以下错误:No mapping found for HTTP request with URI [/test.html] in DispatcherServlet with name 'dispatcherServlet'但去掉这个注解即可以正常访问。为什么会有这样的区别?加En...

2018-09-20 19:22:02 3096

原创 Spring Validation及消息国际化.md

在项目中,接收到前端或者其它客户端的调用请求时,需要对传入的参数进行校验。完成这些校验最原始的做法就是编写代码一个个参数进行判断,如判断是否为空、长度是否符合要求、格式是否符合要求等;对于一些简单的输入还好,越复杂的输入,这些校验的代码及逻辑越长,而且在校验失败后组装的返回消息也是因人而异,导致同一项目里面校验失败后返回的消息不统一,最终结果就是用户体验较差。JSR-303为这类校验提供了一个规...

2018-09-19 09:51:23 11965 13

原创 Spring Boot静态页面配置

在使用Spring Boot时,如果页面也在同一个项目,需要添加以下配置,否则DispatchServlet会去查找Handler处理页面请求,而导致报以下的错:Could not resolve view with name 'test' in servlet with name 'dispatcherServlet'仅仅只是配置了viewResolver也不行,会报以下错误:No ma...

2018-09-19 09:43:52 713

原创 SpringBoot国际化配置分析

DispatcherServlet使得开发人员可以通过客户端的Locale来自动转换消息进行国际化;在整个国际化的过程中,主要分成两步,一是解析客户端的Locale,一是查找国际化的消息;1. 解析Locale解析Locale是通过LocaleResolver来完成的。当有请求时,DispatcherServlet查找LocaleResolver类型的Bean,如果找到,则使用它获...

2018-09-17 08:56:50 2207 8

原创 Spring异常处理方案

1. 概述主要主是将错误信息的错误码及描述信息保存到Properties文件中,然后提供工具类来读取这些错误信息并创建RestException。涉及的类图如下: 2. 错误信息定义文件# 角色role.exists=S04M001,角色名称已存在role.not.exists=S04M002,角色({})不存在# 用户user.username.not.exits...

2018-07-03 20:01:42 890

原创 0 代码量杂谈

在使用POI导出Excel文件时,如果某个单元格需要设置成下拉选择的方式,并且下拉列表数目大于255时,直接写序列将会报错:java.lang.IllegalArgumentException: String literals in formulas can't be bigger than 255 characters ASCII此时可以增加一个隐藏的Sheet,然后在需要设置下拉的单元...

2018-06-21 13:30:35 436

原创 8 Spring Boot返回数据及异常统一封装

项目开发中,一般情况下对数据返回的格式可能会有一个统一的要求,一般会包括状态码、信息及数据三部分。举个例子,假设规范要求数据返回的结构如下所示:{"data":[{"id":5,"userId":5,"name":"test1","articleCount":0}],"errorMessage":"","statusCode&quo

2018-05-30 20:07:03 14999 11

原创 4 Spring Cloud集群服务清单及搜索页面实现

在使用Spring Cloud的集群中,有时候想要看到集群中所提供的所有服务清单。但目前未找到较好的应用。Swagger能够提供每一个应用所提供的服务清单,但集群中所有的服务清单并没有集成起来。想要看哪个应用提供的服务清单需要到各个应用上去查看。而且它所提供的信息过多,很多时候都不需要使用到。因此,在基于Actuator及Swagger基础上,开发了一个集成显示所有清单的页面,并提供简单的搜索...

2018-05-25 09:26:50 1139

原创 Spring测试静态方法打桩-PowerMockito及SpringBootTest结合使用

Mockito无法对静态方法进行Mock,如果需要Mock静态方法,需要使用到PowerMockito。1. Maven依赖&lt;dependency&gt; &lt;groupId&gt;org.powermock&lt;/groupId&gt; &lt;artifactId&gt;powermock-api-mockito&lt;/artifactId&gt;...

2018-05-24 08:43:59 12915

原创 基于Spring Cloud微服务集群的服务治理思考

就目前了解的情况来看,公司的服务提供方是较为混乱的。可能也是因为刚进公司对大多数服务都不是很了解的原因。至少目前来说还是一头雾水。个人觉得在以下方面可以加强:每一个服务提供方的功能范围需要明确,且能够从某种意义上与其它的服务提供方区分开来,形成文档来描述系统划分的原则与依据,协助使用者清晰的理解各个提供方的功能,简化调用。同时在后续的服务开发过程中严格按照这些原则来将新增加的服务划分到正...

2018-05-23 09:06:49 426

原创 Java并发基础-Fork、Join方式的并行计算研究分析

本文目录:1 Fork/Join概述2 示例3 详解3.1 ForkJoinPool3.2 ForkJoinTask3.3 RecursiveAction与RecursiveTask1 Fork/Join概述Fork/Join是JDK中提供的类似Map/Reduce的并行计算的实现;它主要处理那些可以递归的分解成更小作业的作业。 与Map/Reduce类...

2018-03-21 18:32:25 360

原创 Java并发基础-锁的使用及原理(可重入锁、读写锁、内置锁、信号量等)

本文目录:1 基础1.1 可重入锁1.2 读写锁2 内置锁synchronized3 显式锁Lock3.1 简单示例3.2 锁常用操作3.3 读写锁使用示例4 信号量Semaphore4.1 信号量使用示例4.2 方法清单1 基础1.1 可重入锁可重入锁表示的是,如果一个线程在未释放已获得锁的情况下再次对该对象加锁,将可以加锁成功...

2018-03-20 15:03:12 1410

Redis客户端

javafx编写的redis客户端; 通过CTLR+N新建连接;CTRL+E切换连接;CTRL+F跳转输入框快速输入查找;输入后按ENTER直接查找记录;DELETE删除所选择的记录(支持多选删除);

2018-12-07

css中文完全参考手册

css中文完全参考手册

2008-05-13

空空如也

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

TA关注的人

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