js解析JWT
懂得生命真谛的人,可以使短促的生命延长。——西塞罗 代码如下: 1"token".split(".").slice(0,2).map(i=>JSON.parse(atob(i))) 当我在解析 jwt 的 token 时,发现 token 中附带的用户 id 存在精度丢失问题,然后用正则改进解析 JWT 的代码: 1const tokenParse = token => token.split(".").slice(0, 2).map(i => JSON.parse(atob(i).replace(/:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g, (match, p1) => Math.abs(p1) > Number.MAX_SAFE_INTEGER ? `:"${p1}"` : `:${p1}`))); 但是还存在 base64 解码时无法正确解码中文问题,继续改进 1const tok...
js解决base64编码问题
地利不如人和,武力不如文德。——恒宽 主要是在解析 JWT 时发现 1atob(base64) 存在编码问题,我们如果想要将 base64 解码为 utf-8: 123456789101112function parseBase64ToJSON(base64) { const binaryString = atob(base64); const len = binaryString.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } const decoder = new TextDecoder('utf-8'); return decoder.decode(bytes);} 然后就可以正确解析中文了
处理js的JSON.parse中Number太长导致精度丢失问题
大自然的真实和单纯,常是重要艺术极点的基础。——恩格斯 代码如下: 1"token".split(".").slice(0,2).map(i=>JSON.parse(atob(i))) 这里主要是 JSON.parse 导致的,我简单复现一下 1JSON.parse('{"id":9052710354240385291}') 得到的是 1{id: 9052710354240385000} 可以看到后面的 291 变为 000 了 解决方式这里使用正则匹配 /:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g 例如: 123456JSON.parse('{"id":9052710354240385291}'.replace(/:\s*([-+]?\d+(\.\d+)?([eE][-+]?\d+)?)/g, (match, p1) => { ...
MilvusPlus
得意淡然,失意泰然。——弘一大师 MilvusPlus: 🔥🔥🔥使用MyBatisPlus的方式,优雅的操作向量数据库 Milvus MilvusPlus 是一个功能强大的 Java 库,旨在简化与 Milvus 向量数据库的交互,为开发者提供类似 MyBatis-Plus 注解和方法调用风格的直观 API。 目录 特性 快速开始 应用场景 [自定义注解特性 注解式配置:采用与 MyBatis-Plus 类似的注解方式配置实体模型。 直观的 API:直接的 API 设计简化数据库操作。 易于扩展:核心设计注重可扩展性。 类型安全:利用 Java 类型安全减少错误。 快速开始自定义扩展支持: 12345<dependency> <groupId>io.github.javpower</groupId> <artifactId>milvus-plus-core</artifactId> <version>2.4.0-SNAPSHOT</version></dep...
jackson范型注意
放弃不难,但坚持一定很酷。——《解忧杂货店》 今天使用 Jackson 有个疑问,就是带范型的对象,Jackson 序列化后,范型会怎样处理: 就比如说{"data":{"data":1}},以及下面这个类: 1234@Datapublic static class Foo<T> { private T data;} 这个外层的 data 会反序列化出来什么类型呢? 实际上反序列化出来 LinkedHashMap 1234var obj = mapper.readValue(""" {"data":{"data":1}} """, Foo.class);Assertions.assertEquals(LinkedHashMap.class, obj.getData().getClass()); 如果我们需要继续解析成具体的类型,则...
nginxproxymanager
开成花灾的玫瑰不是灿烂,而是荒凉。——严歌苓 https://nginxproxymanager.com/ 该项目作为预构建的 docker 映像提供,使您能够轻松转发到在家或其他地方运行的网站,包括免费的 SSL,而无需了解太多有关 Nginx 或 Letsencrypt 的信息。 快速设置 完整设置 截图 基于 Tabler 的美观且安全的管理界面 无需了解 Nginx 即可轻松创建转发域、重定向、流和 404 主机 使用 Let’s Encrypt 免费 SSL 或提供您自己的自定义 SSL 证书 主机的访问列表和基本 HTTP 身份验证 超级用户可用的高级 Nginx 配置 用户管理、权限和审核日志 快速设置 安装 Docker 和 Docker-Compose Docker 安装文档 Docker-Compose 安装文档 创建一个与此类似的 docker-compose.yml 文件: yml 123456789101112version: '3.8'services: app: ima...
添加OceanBase-MybatisPlus案例
多思不若养志,多言不若守静,多才不若蓄德。——曾国藩 我在 ob-samples 添加的 demo 合并了 https://github.com/oceanbase/ob-samples/pull/37 通过 mybatisplus-java 启动和测试 OceanBase Docker容器,更多详细信息可以参见 https://github.com/baomidou/mybatis-plus以及 https://java.testcontainers.org/modules/databases/oceanbase 。 快速开始将 OceanBase 驱动、TestContainers OceanBase、MybatisPlusStarter、SpringBootStarter Test 模块添加到 POM。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546<dependencies> <dependency> <grou...
zui
读书须求大义,不可缠绕于琐碎传注之间。——贺钦 分享一个禅道开源的 UI 库 ZUI https://github.com/easysoft/zui 官方文档: https://openzui.com/ ZUI 3 是一个全新的开源 UI 组件库,提供了丰富的实用组件,并提供自由的定制使用方式,不依赖任何 JavaScript 框架,可以在任何 Web 应用中通过原生的方式使用。 访问 ZUI 3 | ZUI 3 来提前预览组件库。 👉 如果你需要访问 ZUI 1,请访问 https://openzui.com/ ,ZUI 1 源码已经转移到 zui1 分支。 特性 🌸 丰富的 CSS 工具类:基于 Tailwind CSS 提供了丰富的 CSS 工具类,包括特别的语义化外观类名; 💠 强大的 JS 组件:基于 Preact 提供了大量 JavaScript 组件,每个组件提供了大量实用的功能选项; 💖 友好现代的界面:提供了经过精心设计的界面风格,所有组件交互经过反复优化和验证以提供最佳方式; 🌗 主题和深色模式:基于 CSS 变量的主题模式,快速生成主题,内置...
jackson序列化时带上类型信息
独学而无友,则孤陋而寡闻。——刘向 首先这么配置即可: 1234objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); 假设我们有两个类 Foo 和 Bar,其中 Bar 是 Foo 的子类。未配置 activateDefaultTyping 之前和配置之后,序列化这些对象的 JSON 表示会有所不同。 类定义 1234567public class Foo { public String value = "A Foo";}public class Bar extends Foo { public String barValue = "A Bar";} 配置前 在不使用 activateDefaultTyping 的情况下,序列化 Foo 类型和 Bar 类型的对象...
gradle修改jdk版本
读书是最好的学习,追随伟大人物的思想,是最富有趣味的一门科学。——普希金 今天拉一个项目报错 123456Unable to start the daemon process.The project uses Gradle 3.5 which is incompatible with Java 11 or newer.Possible solution: - Upgrade Gradle wrapper to 7.2 version and re-import the project 找了半天没找到修改jdk的入口 最后还是双击shift,搜Change Gradle JDK Location 这才找到:
