From 048dadaff733f228f54343ca5b36909bffde3d6d Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Mon, 24 Feb 2025 02:11:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BA=E5=BA=8F=E5=88=97=E5=8C=96?= =?UTF-8?q?=E5=99=A8=E6=96=B0=E5=A2=9E=20`objectToBytes`=E3=80=81`bytesToO?= =?UTF-8?q?bject`=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serializer/SaSerializerTemplate.java | 16 ++++++++ .../impl/SaSerializerTemplateForJdk.java | 40 +++++++++++++------ .../impl/SaSerializerTemplateForJson.java | 11 +++++ 3 files changed, 55 insertions(+), 12 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/SaSerializerTemplate.java b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/SaSerializerTemplate.java index 8eb8ed03..19770ac1 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/SaSerializerTemplate.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/SaSerializerTemplate.java @@ -39,4 +39,20 @@ public interface SaSerializerTemplate { */ Object stringToObject(String str); + /** + * 序列化:对象 -> 字节数组 + * + * @param obj / + * @return / + */ + byte[] objectToBytes(Object obj); + + /** + * 反序列化:字节数组 → 对象 + * + * @param bytes / + * @return / + */ + Object bytesToObject(byte[] bytes); + } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJdk.java b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJdk.java index e2f76210..1149d82d 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJdk.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJdk.java @@ -30,6 +30,24 @@ public interface SaSerializerTemplateForJdk extends SaSerializerTemplate { @Override default String objectToString(Object obj) { + byte[] bytes = objectToBytes(obj); + if (bytes == null) { + return null; + } + return bytesToString(bytes); + } + + @Override + default Object stringToObject(String str) { + if(str == null) { + return null; + } + byte[] bytes = stringToBytes(str); + return bytesToObject(bytes); + } + + @Override + default byte[] objectToBytes(Object obj) { if (obj == null) { return null; } @@ -38,28 +56,26 @@ public interface SaSerializerTemplateForJdk extends SaSerializerTemplate { ObjectOutputStream oos = new ObjectOutputStream(baos) ) { oos.writeObject(obj); - byte[] bytes = baos.toByteArray(); - return bytesToString(bytes); + return baos.toByteArray(); } catch (IOException e) { - throw new SaTokenException(e); - } - } + throw new SaTokenException(e); + } + } @Override - default Object stringToObject(String str) { - if(str == null) { + default Object bytesToObject(byte[] bytes) { + if(bytes == null) { return null; } - byte[] data = stringToBytes(str); try ( - ByteArrayInputStream bais = new ByteArrayInputStream(data); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais) ) { return ois.readObject(); } catch (IOException | ClassNotFoundException e) { - throw new SaTokenException(e); - } - } + throw new SaTokenException(e); + } + } /** * byte[] 转换为 String diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJson.java b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJson.java index 129e1376..b3597f7d 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJson.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/serializer/impl/SaSerializerTemplateForJson.java @@ -16,6 +16,7 @@ package cn.dev33.satoken.serializer.impl; import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.exception.ApiDisabledException; import cn.dev33.satoken.serializer.SaSerializerTemplate; /** @@ -36,4 +37,14 @@ public class SaSerializerTemplateForJson implements SaSerializerTemplate { return SaManager.getSaJsonTemplate().jsonToObject(str); } + @Override + public byte[] objectToBytes(Object obj) { + throw new ApiDisabledException("json 序列化器不支持 Object -> byte[]"); + } + + @Override + public Object bytesToObject(byte[] bytes) { + throw new ApiDisabledException("json 序列化器不支持 byte[] -> Object"); + } + }