欢迎大家来到IT世界,在知识的湖畔探索吧!
效果图:

欢迎大家来到IT世界,在知识的湖畔探索吧!
语言:JAVA
框架:SpringBoot
说明:
无需其它配置,按下面参考类即可实现接口返回ID变为随机密文,对业务无侵入
建议:
加密的KEY最好是用户登录成功之后再生成一个随机的KEY,安全性更高
实现代码:
/ 注解 / @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @JsonSerialize(using = IdHashSerializer.class) @JsonDeserialize(using = IdHashDeserializer.class) public @interface IdHash { }
欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到IT世界,在知识的湖畔探索吧!/ 加密类 / @Slf4j public class IdHashSerializer extends JsonSerializer
{ private HttpServletRequest request; public IdHashSerializer(HttpServletRequest request) { // Spring会自动注入 this.request = request; } @Override public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if(value == null) return; Object secretKey = request.getAttribute("D-Secret-Key"); //// 全局KEY 或 用户登录成功生成随机KEY if(secretKey == null) { gen.writeNumber(value); return; } try { ////// 加密算法参考 gen.writeString(AesUtils.urlEncrypt(value.toString(), secretKey.toString())); } catch (Exception e) { log.warn("[idhash] serialize fail. value: {}, uid: {}", value, request.getAttribute("D-User-Id")); throw new KnownException("90001", "无效的请求"); } } }
/ 解密类 / @Slf4j public class IdHashDeserializer extends JsonDeserializer
{ private HttpServletRequest request; public IdHashDeserializer(HttpServletRequest request) { this.request = request; } @Override public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String value = p.getText(); if(StringUtils.isEmpty(value)) { return null; } Object secretKey = request.getAttribute("D-Secret-Key"); //// 全局KEY 或 用户登录成功生成随机KEY if(secretKey != null) { try { return Long.parseLong(AesUtils.urlDecrypt(value, secretKey.toString())); } catch (Exception e) { log.warn("[idhash] deserialize fail. value: {}, uid: {}", value, request.getAttribute("D-User-Id")); throw new KnownException("90002", "无效的请求,请刷新页面后重试"); } } return Long.parseLong(value); } }
使用示例:
欢迎大家来到IT世界,在知识的湖畔探索吧!@Getter @Setter @Schema(description = "保存-菜单") public class SaveMenuDto { @IdHash/ 注解 / @Schema(description = "菜单ID") private Long id; @IdHash/ 注解 / @Schema(description = "上级菜单ID") @JsonSetter(nulls = Nulls.SKIP) private Long pid = 0L; ... }
@Getter @Setter public class QueryTreeVo implements BaseVo { @IdHash/ 注解 / private Long id; private String title; private Integer status; private Boolean leaf = true; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/117478.html