<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[icarusliu的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/icarusliu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; icarusliu]]></copyright><item><title><![CDATA[Java中文验证码实现]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/115142430</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/115142430</guid><author>icarusliu</author><pubDate>Tue, 23 Mar 2021 20:40:36 +0800</pubDate><description><![CDATA[中文验证码实现，有几点需要注意：

一是生成的时候图片大小需要大一些，否则字体显示会非常不清晰，比如我设置的宽高就是700*200
二是Linux上使用时需要安装对应的字体，否则中文文字显示不出来。

目前实现了背景颜色随机、文字颜色及干扰线等颜色随机等；生成效果图如下所示：

随机生成第二次效果如下：

package com.huashi.water.core.module.base.service;

import com.huashi.water.core.common.service.RedisS]]></description><category></category></item><item><title><![CDATA[微信授权登录实现分析]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/111925891</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/111925891</guid><author>icarusliu</author><pubDate>Tue, 29 Dec 2020 16:10:41 +0800</pubDate><description><![CDATA[微信授权登录包含有几种场景：一是公众号；二是H5页面；三是其它APP；本文主要讲述公众号及H5页面的实现，关于其它APP的应用，请参考官方文档。
1. 公众号与H5
公众号应用其实也是H5页面，不过是H5页面在微信浏览器中打开。但这两种方式有着本质的区别。其最关键的不同在于，通过公众号打开H5页面可以直接弹出微信授权登录对话框，如下所示：

而使用其它浏览器只能打开一个二维码的页面：

在手机端要使用微信扫码，这个体验是非常之差劲的，只可惜微信目前并未对这种方式进行改进。对于H5页面如果想要兼容常规浏览器和]]></description><category></category></item><item><title><![CDATA[Vue现有项目Nuxt改造实例解析]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/111824660</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/111824660</guid><author>icarusliu</author><pubDate>Sun, 27 Dec 2020 19:34:00 +0800</pubDate><description><![CDATA[本文主要讲述如何将一个现有的vue-cli项目按nuxt进行SSR改造。
nuxt官网文档有新项目使用nuxt的相关指南，如有相关需要的可以直接转移到官网了解
nuxt官网地址：nuxt官网
注意官网上相关文档基本都是英文的，如想看中文文档可以在w3cSchool上找到，地址：https://www.w3cschool.cn/nuxtjs/nuxtjs-b4kl36fw.html  
1. 背景
今年自己完成了几个项目的开发，基本都是基于自己总结的一整套前后端基础应用来进行开发的，其中前端使用VUE+ele]]></description><category></category></item><item><title><![CDATA[ORA-00119: invalid specification for system parameter LOCAL_LISTENER异常解决]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/106001289</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/106001289</guid><author>icarusliu</author><pubDate>Fri, 08 May 2020 17:10:12 +0800</pubDate><description><![CDATA[安装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...]]></description><category></category></item><item><title><![CDATA[Excel读写操作抽象简述]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/104483033</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/104483033</guid><author>icarusliu</author><pubDate>Mon, 24 Feb 2020 19:04:13 +0800</pubDate><description><![CDATA[1、背景
很多项目里面都需要对Excel进行操作，这个时候我们一般使用POI工具，其中使用最多的三个场景如下：

生成导入模板：

需要为生成的Excel增加各种校验，如下拉、长度限制、单元格类型等；
只需要增加标题行，无数据行；


导入数据：

需要从单元格中读取各种类型的数据，如数字类型、文本类型、日期类型等；
用户上传的文件格式可能比较混乱，如预期是文本格式的单元格实际格式是数字，在读取时...]]></description><category></category></item><item><title><![CDATA[Redis操作无响应问题处理记录及总结]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/100979258</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/100979258</guid><author>icarusliu</author><pubDate>Wed, 18 Sep 2019 12:48:09 +0800</pubDate><description><![CDATA[项目中某个功能使用了Redis做缓存，使用代码如下：
 Map&lt;String, String&gt; map = new HashMap&lt;&gt;(16);
 configItems.stream()
         .map(ProductionLineConfigItemDTO::getDeviceId)
         .filter(Objects::nonNull)
  ...]]></description><category></category></item><item><title><![CDATA[JavaFX表格选择单元格时高亮所在行功能实现]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/100670375</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/100670375</guid><author>icarusliu</author><pubDate>Mon, 09 Sep 2019 18:22:02 +0800</pubDate><description><![CDATA[使用JavaFX表格进行数据展示时，想要将当前所选择的单元格所在的行进行高亮，经过研究，实现方案见下文。
主要的思路：为Table定制TableCell，在TableCell中的RowIndex发生变更后，检查Cell所在行是否被选中，根据是否选中来设置单元格的背景色。
但按这种方式有一个问题，TableCell的RowIndex时，一般只有表格的数据发生变化的时候才会变更，如果直接在监听RowI...]]></description><category></category></item><item><title><![CDATA[编程基础-代码优化示例一(Builder模式、Stream及面向对象）]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/100285834</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/100285834</guid><author>icarusliu</author><pubDate>Mon, 02 Sep 2019 15:06:34 +0800</pubDate><description><![CDATA[编码其实是一个可以做到非常精致的事情，每次回头看自己以前写的代码，总是觉得可以采用更好的方式去实现。从好的方面来说自己一直在进步，但从差的方面来说就是自己一直都做的不够好。
在日常编码过程中有时候灵机一动的念头，可能就是对于解决某些场景非常有用的方案，因此我决定将一些编码过程中的优化记录下来，总结后真正的变成自己的东西，这样在往后的编码过程中就可以做到更好。当然代码优化是一个永无止境的事情，总结也...]]></description><category></category></item><item><title><![CDATA[IDEA插件开发总结]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/96324166</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/96324166</guid><author>icarusliu</author><pubDate>Wed, 17 Jul 2019 16:38:06 +0800</pubDate><description><![CDATA[前言
IDEA是一个非常强大的工具，对于提高编程效率有非常大的帮助。当然他也不是全能的，有时候的一些需求他可能并没有办法直接满足，这个时候一般就需要通过他的插件来完成了。
目前Idea已经有了非常多的插件可以使用，但有时候可能现有插件并不能满足自己的需求，我就遇到了两个，如生成Bean的Setter方法时，想要同时生成void类型的Setter以及返回Bean类型的Setter方法，并未找到好的插...]]></description><category></category></item><item><title><![CDATA[Idea插件开发-JPA、MyBatis实体类代码生成器插件]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/96163921</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/96163921</guid><author>icarusliu</author><pubDate>Tue, 16 Jul 2019 18:21:26 +0800</pubDate><description><![CDATA[使用Spring开发项目的过程中，习惯于使用JPA进行表的创建、数据的更新等操作，但JPA对于复杂查询的支持比较差，因此很多时候又会同时引入mybatis来进行复杂查询。
再加上实体对象与传输对象分离，在开发一个简单的表单查询维护功能时，也需要创建很多的类来完成对应功能的开发，如DTO对象、数据库操作类、DTO与实体类转换器、操作服务接口、操作服务接口实现类、控制器等。每次我们新创建一个实体类，都...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-授权服务源码解读]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/90510845</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/90510845</guid><author>icarusliu</author><pubDate>Fri, 24 May 2019 09:37:01 +0800</pubDate><description><![CDATA[授权服务主要完成以下四个核心功能：

客户端授权关系管理；
接收用户或客户端登录请求，生成accessToken
Token存储
Token校验

本文将从源码层面分析授权服务如何实现上述四个功能。
关于Spring Oauth2的一些基础概念及示例，可参考：http://liumoran.cn/topic/myTopics/1
1. 概述
授权服务包含有以下几个关键类：

EnableAutho...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-资源服务源码解读]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/90199796</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/90199796</guid><author>icarusliu</author><pubDate>Tue, 14 May 2019 09:22:26 +0800</pubDate><description><![CDATA[通过Spring Security OAuth专题学习的前面四篇文章（http://liumoran.cn/topic/myTopics/1），对于Spring Security OAUth的基本使用已经有了一些基本的概念。
然而对于资源服务及授权服务生效原理，仍旧一无所知。接下来将从源码层面对Spring Security OAuth相关组件进行分析与学习。
Spring Security OA...]]></description><category></category></item><item><title><![CDATA[Spring Boot+Vue+Spring Security OAuth2的前后端分离项目实现研究]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/90045871</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/90045871</guid><author>icarusliu</author><pubDate>Thu, 09 May 2019 19:12:14 +0800</pubDate><description><![CDATA[业余在开发一个Spring Boot+Vue+Spring Security OAuth2的一个前后端分离项目，其中遇到不少如跨域、OPTIONS请求处理、PreAuthorize注解无效、Token失效处理等问题，记录如下。
在此项目中，资源服务与授权服务在同一应用中，使用端口8081；前端应用使用端口8080。前端使用axios进行ajax调用。
关于Spring Security OAuth...]]></description><category></category></item><item><title><![CDATA[【问题处理】Spring Boot中kafka消息能力不足现象及问题解决]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/88979076</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/88979076</guid><author>icarusliu</author><pubDate>Tue, 02 Apr 2019 19:27:44 +0800</pubDate><description><![CDATA[【本文首发于个人网址：liumoran.cn】
kfaka中主要包含生产者与消费都对象，生产者往队列中推送消息，而消费者则从队列中读取并处理消息。生产者推送的过程较为简单，而对于消费者来说，情况复杂且容易受各种因素影响。
1. 消费过程
消费过程如下所示：
Created with Raphaël 2.2.0开始是否有消息？读取消息处理消息提交offset是否停止?结束等待等待超时yesnoyes...]]></description><category></category></item><item><title><![CDATA[Spring Boot中如何使得fastjson支持JDK8新时间对象LocalDate、LocalDateTime]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/88826332</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/88826332</guid><author>icarusliu</author><pubDate>Tue, 26 Mar 2019 18:00:48 +0800</pubDate><description><![CDATA[在Spring Boot中使用fastjson来处理JSON格式转换时，默认情况下是不支持JDK1.8中的LocalDateTime及LocalDate等时间对象的。为使其支持这些对象，可以定义相关的ObjectDeserializer来处理，并将定义的对象通过ParserConfig.getGlobalInstance().putDeserializer方法将其作为全局配置。
实现如下：
@Co...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-授权码模式及简化模式实例]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/87984429</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/87984429</guid><author>icarusliu</author><pubDate>Wed, 27 Feb 2019 18:42:27 +0800</pubDate><description><![CDATA[本文是Spring Security OAuth2学习系列文章中的第四篇；主要讲解授权码模式(AuthenticationCode)及简化模式(Implicit)的使用。
关于密码模式、客户端模式及Spring Security OAuth2的一些基础知识，请移步本博客文章清单进行查看。
1. 简介
授权码模式主要使用在客户端与授权、资源服务器不在同一公司的情况；在这种场景下，客户端并不是可信的，...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-密码模式JWT实现]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/87968090</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/87968090</guid><author>icarusliu</author><pubDate>Wed, 27 Feb 2019 10:40:20 +0800</pubDate><description><![CDATA[本文是Spring Security OAuth2学习系列文章中的第三篇；主要讲解密码模式下如何使用JWT管理Token。
关于密码模式非JWT的实现示例及Spring Security OAuth2的一些基础知识，请移步本博客文章清单进行查看。
1. JWT是什么
JWT是JSON Web Token的缩写。它与标准Token不一样的地方在于，在Token中它附加存储了很多额外的信息，如Toke...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-密码模式及客户端模式实例]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/87915600</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/87915600</guid><author>icarusliu</author><pubDate>Mon, 25 Feb 2019 13:48:28 +0800</pubDate><description><![CDATA[在https://blog.youkuaiyun.com/icarusliu/article/details/87911093一文中，介绍了OAuth的一些背景知识；本文将编写一个简单的示例，演示授权模式中的密码模式及客户端模式如何实现。
本示例中涉及到的几个对象其关系如下图所示：

密码模式一般用于用户对客户端信任度最高的情况下，因为客户端需要保存用户在授权服务器中的用户名及密码信息，客户端可以访问所有用户...]]></description><category></category></item><item><title><![CDATA[Spring Security OAuth专题学习-背景]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/87911093</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/87911093</guid><author>icarusliu</author><pubDate>Mon, 25 Feb 2019 09:17:43 +0800</pubDate><description><![CDATA[在公司项目中有使用到Spring Security OAuth2来对Spring Cloud集群的授权进行控制，为加深对这一技术的理解，自己花时间对OAuth的几个授权类型进行了学习，并记录如下。
本文主要介绍一些oauth2相关的背景知识及常见概念。后续将针对每一种授权模式进行实战演练。
1. 产生背景
在传统前后端不分离的WEB应用中，一般通过Session的方式来保存用户登录状态；每一个请求...]]></description><category></category></item><item><title><![CDATA[Spring Cloud配置文件加载简述]]></title><link>https://blog.youkuaiyun.com/icarusliu/article/details/85335417</link><guid>https://blog.youkuaiyun.com/icarusliu/article/details/85335417</guid><author>icarusliu</author><pubDate>Sat, 29 Dec 2018 10:42:18 +0800</pubDate><description><![CDATA[Spring Cloud中配置文件的加载机制与其它的Spring Boot应用存在不一样的地方；如它引入了bootstrap.properties的配置文件，同时也支持从配置中心中加载配置文件等；本文主要聚焦在这些配置文件加载的优先级及覆盖关系的控制上，对于帮助理解Spring Cloud的配置文件加载方式有一定的帮助。
1. bootstrap上下文
Spring中加载的配置文件是分层级的；
S...]]></description><category></category></item></channel></rss>