- 博客(576)
- 资源 (31)
- 收藏
- 关注
原创 轻量级的资源授权:基于 OAuth 规范
感觉 OAuth 太负盛名了,以至于后来在 OIDC 反而难以企及前辈 OAuth。倒是大家谈论比较多的是 JWT(例如),——实际谈 JWT 就是在实现 OIDC,反而 OIDC 大家不怎么爱谈!但我们要知道的是,真正诠释这些的,做点单点登录的,——是 OIDC 规范,JWT 只是 OIDC 规范下的一种 Token 协议,再说句难听的,如果 JWT 不满足或者有问题,换别的 Token 实现规则也行。
2023-11-18 15:51:08
86
原创 轻量级 Java 日志组件
日志记录功能在开发中很常用,不仅可以记录程序运行的细节,方便调试,也可以记录用户的行为,是框架中不可或缺的组件。为最大程度复用现有的组件,我们就地取材使用了 JDK 自带的 JUL()作为日志组件,并对其进行功能上的增强。这是笔者 17 年的时候就研究过了(见博客时至今日,感觉还是使用 Slf4J API 的人群多,顺应潮流,决定打造兼容 Slf4J 风格的整合,使用上也更便捷,可结合 Lombok 强大的功能,在类身上施加一个注解即可。
2023-11-18 15:50:20
278
原创 轻量级 SSO 方略:基于 OIDC 规范(二)
介绍了 SSO 相关的基础数据,这样有了 ClientId 和密钥后,我们就要准备客户端这边的代码。客户端当前指的便是一个网站(也就是 RP),这个网站要求有会员功能,典型地网站导航上通常会有“注册”或“登录”的链接。假设我们这是最简单的网站,采用 Servlet Session 本地记录用户凭证。本身这个网站设计用户的模块,得通过 SSO 完成用户登录。另外我们还要准备一个登录页面,简单的例子如下。这个页面存在 SSO 中心(也就是 OP)的,而不是客户端的。
2023-11-13 21:43:27
214
转载 深入研究线程池
线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合。注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和线程组的区别.关于线程组的概念请参阅基础部分。那么如果一个线程循环执行一段代码是否是线程池?如果极端而言,应该算,但实际上循环代码应该算上一个逻辑单元。我们说最最弱化的线程池。这就不能说循环中执行多个逻辑单元,因为它只是简单地对循环外部的初始变量执行++操作。而如果已经有一个队列我们说这个线程就是循环执行多个逻辑单元,可以说这个线程是弱化的线程池。
2023-11-06 20:03:28
29
原创 轻量级邮件发送组件:基于 Socket/SMTP 协议的浅层封装
Java 发送邮件组件,大家第一时间想到的就是 JavaMail。JavaMail 本身也不大,才 500kb 的 jar 包,足够轻量级。而今天为大家介绍的,可以说“羽量级”,核心一个类就可以发送邮件了,除了依赖 JDK 无须依赖什么。如果我们了解 SMTP 协议以及 Socket 的简单使用,就知道其中过程并不复杂——实质都是基于文本的协议交互。
2023-11-03 13:44:47
77
转载 微服务安全认证架构是如何演进而来的?
之前有同事问为何要用基于 JWT 令牌的认证架构,然后近期又有童鞋在后台留言问微服务安全认证架构的实践,因此我决定花两篇推文来解答一下。为了答好这个话题,我们先来看看微服务的安全认证架构是如何演进而来的,从而更好地理解。
2023-10-29 19:44:10
52
原创 轻量级 SSO 方略:基于 OIDC 规范(一)
OIDC 是 OpenID Connect,见官网介绍。OIDC 为用户身份认证提供了明确的规范指南,以方便我们更好地设计一个 SSO 产品。
2023-10-29 00:58:18
167
原创 利用 JSqlParser 防止 SQL 注入
高手文章介绍了利用 JSqlParser 防止 SQL 注入,写得很好,只不过有两个问题,代码比较复杂,我于是作了简化,只有两个类;其次检测比较严格,连子查询都禁止,我把它开放了。
2023-10-28 15:54:33
396
2
原创 嵌入式 Tomcat 调校
SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。调用嵌入式 Tomcat,如果按照默认去启动,一个 main 函数就可以了。
2023-10-25 22:35:54
982
原创 轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC
SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。为了说明如何打造轻量级的 SpringBoot,本文分为“嵌入式 Tomcat”、“增强 SpringMVC”和“打包/部署”三个小节来介绍。
2023-10-25 18:12:41
817
原创 轻量级导出 Excel 标准格式
一般业务系统中都有导出到 Excel 功能,其实质就是把数据库里面一条条记录转换到 Excel 文件上。Java 常用的第三方类库有 Apache POI 和阿里巴巴开源的 EasyExcel 等。另外也有通过 Web 模板技术渲染 Excel 文件导出,这实质是 MVC 模式的延伸,数据转为成不同的视图罢了。
2023-10-20 23:06:37
1462
原创 Java 转换 WebP 图片,使用 webp-imageio
WebP 是 Google 推出的一种新型图片格式,相比于 传统的 PNG/JPG 图片有着更小体积的优势,在当今 Web 中有着广泛的应用。但是Java 和 JDK 本身不支持 WebP 图像,不过我们可以使用库来支持 WebP 图片。顺便提一提其他库支持的方式。WebP 最早是这个 webp project of Luciad 库提供支持的,但它需要手动安装对应的动态链接库,非常不方便。项目作者为了解决这个问题,改进了对动态链接库的读取方式,把从读取改成了从项目 resource 文件中读取。
2023-09-15 23:29:57
658
原创 简明 JDBC 数据访问操作库:JdbcHelper(三)
之前写的查询 API,感觉不够清晰,原因是我当时喜欢用方法重载,以为相同的方法名更统一,心智更少,其实不然,在使用过程中发现却是更迷糊,要通过参数不同去甄别。于是,我有了重构代码的想法,并在昨晚改了下,有了这个新的版本。这次我采用链式调用的风格,且不同名字的方法来区分,如果 info()/infoMap, list()/listMap(),有标明 Map 的就返回 Map 结果,否则是返回 Java Bean 的。可见是 Java Bean 优先(简洁的名字给 Java Bean 了)。
2023-09-15 10:59:10
75
原创 简明 JDBC 数据访问操作库:JdbcHelper(二)
上篇文章中,主要简介了 JdbcHelper 及 JdbcReader,其中关于 JdbcReader 都是偏源码、偏底层原理的介绍。这次我们打算介绍 Reader 的应用,怎么用于日常的 SQL 数据查询工作中,——所形成封装的就是。所谓 CRUD,顾名思义就是增删改查的工作。
2023-09-12 23:11:55
158
原创 学习 Java 的多线程开发
在介绍线程 Thread 之前,我们必须先搞清楚程序 Program 和进程 Process 这两个概念。main。
2023-09-07 00:01:14
308
转载 库存仓库:简单匹配算法/库存释放/库存扣减
通常在电商项目的库存项目中,每条库存记录都有一个对应的仓库字段,warehouse,同一个商品可能在多个仓库中都存在的。假设用户添加一个商品 sku1到购物车中,这个 sku1在 warehouse1和 warehouse2 都存在,这个时候到底要扣减哪个仓库中的库存呢?这里有个仓库优先级的概念,一般来说,会有专门的系统来决定仓库扣减的优先级。
2023-09-06 00:54:37
155
转载 关于分布式系统的数据一致性问题
最近写了一个关于 铁道部购票系统的若干文章铁道部新客票系统的设计(一)铁道部新客票系统的设计(二)铁道部新客票系统的设计(三)正好遇到一个博友,咨询了一个问题,这个问题正好可以作为分布式系统的数据一致性的简单例子,当然,这个只是比较简单的情况。
2023-09-05 04:00:00
56
转载 Spring 事务管理器设计思想
在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的 iBatis 框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程变量中指定的数据库连接名称来获取实际的数据源。每次调用 Spring 事务管理器之前设置事务提交之后在调用方法即可。但是这样设计实际使用过程中也会遇到一些典型的问题,这就是在仔细了解 spring 中持久化层的设计之后,才能明白所产生的问题的原因。下面主要总结一下 spring 持久化的设计。
2023-09-04 22:44:25
43
原创 学用 CountDownLatch 与 CyclicBarrier
CountDownLatch 强调一个线程等多个线程完成某件事情。CyclicBarrier 是多个线程互等,等大家都完成。CountDownLatch 很明显是可以不限制等待线程的数量,而会限制 countDown的操作数;CyclicBarrier 会限制等待线程的数量写法当然不一样,看看下面的伪代码main(){启动5个线程。。。cd.await();//让当前线程休眠,执行代码... (该代码不会立即执行,等待5个线程执行完成后,当前线程会被唤醒,继续执行后面的代码)
2023-09-02 11:27:02
173
翻译 语言与机器 Languages and Machines
至关重要的是,你不是推理你自己写的代码,而是编译器所写的代码,因为从官方的角度来说,目标代码才是"真正"的代码,而 pidgin 只是一种便利。)一种证明这一观点的方法是,定义一次性的 λ 演算到 RAM 代码的编译器,明确表明 λ 演算的抽象步骤可以在 RAM 上以常数时间执行(即不随输入的大小变化,只随静态程序的大小变化)。嗯,如果你的工作都是在复杂性的多项式因子范围内完成的,并且你只关心自然数(或其他有限对象)上的计算,那么这确实不重要。嗯,尽管这是真的,但我可以告诉你,你的论点是站不住脚的。
2023-08-31 10:47:49
53
原创 轻量级 Bean 实体校验器
利用 Spring 自带校验器结合 JSR 注解实现轻量级的 Bean 实体校验器。轻捷、简单、很容易上手,也容易扩展。三个核心类`ValidatorInitializing`、`ValidatorImpl`、`ValidatorEnum`去掉注释不超过共200行源码实现 10多m 的 Hibernate Validator 多数功能。
2023-08-20 12:14:52
140
原创 轻量级 Spring Task 任务调度可视化管理
大家都知道 Spring Scheduler 好用和怎么用,但它没有一个像 XXL-Job 有个后台界面的,好像不太完整,于是笔者打算为 Spring Scheduler 提供一个可视化的操作界面,虽然赶不上 XXL-Job 那么强大,但也算弥补其中缺失的一环。它支持在线监控执行的任务、支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务。另外本组件的特色就是非常简单,或者说“轻量级”,只有两个主要的类和一个前端静态 html 组成,Java 的话总共不超过 500 行代码。
2023-08-12 10:24:16
606
2
原创 Tomcat 编程式启动 JMX 监控
通过这篇,我们可以了解到,利用 JMX 技术可以方便获取 Tomcat 监控情况。但是我们采用自研的框架而非大家常见的 SpringBoot,于是就不能方便地通过设置配置开启 Tomcat 的 JMX,——尽管我们也是基于 Tomcat 的 Web 容器,而是还是 SpringMVC。在笔者一番尝试下,终于实现了“Enable Embedded Tomcat JMX Programmatically”,所谓 Programmatically 就是编程式的用 Java 代码去配置。
2023-08-06 22:56:56
668
原创 工作流与状态机
引言与动机:世界是那么的广阔无垠,姿态万千,我们梦想着计算设备的多元化,而如今我们已经梦想成真,但同时业务模型同样变得纷繁复杂。如果不考虑我们拥有的繁杂的业务模型,就很难谈得上去探索行业发展的方向。MyWF 是基于有限状态机 FSM(Finite State Machine)理论的工作流引擎。状态机、状态机顾名思义着眼点在“状态(State)”上,以“状态”的不同为设计的参考物。一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。每请求一次,状态就更换一次,就执行对应的行为。
2023-08-02 14:11:51
683
转载 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
如果你没时间读整篇文章或者你仅仅是略读了一下前面的内容。这个世界上从来没有纯文本这回事,如果你想读出一个字符串,你必须知道它的编码。Unicode 是一个简单的标准,用来把字符映射到数字上。Unicode 协会的人会帮你处理所有幕后的问题,包括为新字符指定编码。Unicode 并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过 UTF 来指定。还有最重要的:永远记得通过 Content-Type 或者 meta charset 标签来显式指定你的文档的编码。
2023-07-18 12:15:50
84
原创 动手写一个 Java JWT Token 生成组件
OAuth2 中默认使用 Bearer Tokens (一般用 UUID 值)作为 token 的数据格式,但也支持升级使用 JSON Web Token(JWT) 来作为 token 的数据格式。实际来说,OAuth 规范中并无限制 Token 采取何种格式。今天我们就采用 JWT 来作为 Token,它的一个好处是自描述 Token,包含了用户信息而并不需要通过额外的接口获取用户信息。所谓 JWT Token,本身是明文的,前端得到之后进行 Base64 解码,即可获取用户信息(JSON)。
2023-06-24 19:37:21
521
原创 自制微信 SDK
微信 SDK,官方 SDK 也有,但我们自己动手,做一个“轮子”。就按上述列出officalappletmerchant源码包,还有一个公用的common。
2023-06-16 21:48:07
361
原创 简单易行的 Java 服务端生成动态 Word 文档下载
解决方案:无非是模板技术,界定不变和变的内容,预留插值的标记,替换为期待的最终内容。需求:某些合同,被制作成模板,以 Word 格式保存,输入相关的内容参数最终生成 Word 文档下载。总之,整个过程可以简述为:先制作一份 word 文档,预留好模板的插值符,然后让后台识别 word 为 jsp 文件(需改后缀名为。),不是返回到前端的 Response,而是文件流2,保存到服务器的磁盘文件上,然后告诉前端可以下载该文件。其中关键的技术点是 JSP 输出的“劫持”,不是输出到浏览器响应,而是保存到文件。
2023-06-06 00:20:56
628
原创 微信分账功能 Java 开发
提示“没有分账权限”,参考开通。预下单要设为 true,默认是 false 不支持分账的:分账个人接收方姓名 name,这个是可选的。
2023-05-09 16:51:04
706
1
微软百科全书 Encarta 2002 CD-3
2022-02-02
微软百科全书 Encarta 2002 CD-1
2022-02-02
帝视尼电话商务录音系统
2022-02-02
领域驱动设计 精简版 Abel Avram 和 Floyd Marinescu 总结整理
2022-01-29
数据结构思维 中文版 Think Data Structures
2022-01-29
简简单单用OpenOffice写书 use_OO_for_writing
2022-01-29
SUPER-SCSI-驱动
2021-11-20
商城测试用图片.7z
2020-02-16
DB Browser for SQLite.zip
2019-08-12
HDTunePro 5(Win8修正版).zip
2019-08-12
JDK JavaScript 独立运行时 Nashorn,Java 7 可用
2016-01-10
数据库转换神器 ESF Database Migration Toolkit - Professional
2015-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人