摘要:项目介绍日志脱敏是常见的安全需求。常见的脱敏内置方案。支持用户自定义注解。自定义注解导入自定义注解新增功能。策略优先级优先生效,然后是系统内置注解,最后是用户自定义注解。让这些的密码不进行脱敏定义测试对象定义一个使用自定义注解的对象。
项目介绍
日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强。编写起来又特别麻烦。
本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。
特性基于注解的日志脱敏。
可以自定义策略实现,策略生效条件。
常见的脱敏内置方案。
java 深拷贝,且原始对象不用实现任何接口。
支持用户自定义注解。
自定义注解 maven 导入自定义注解com.github.houbb sensitive-core 0.0.4
v0.0.4 新增功能。允许功能自定义条件注解和策略注解。
案例 自定义注解策略脱敏
/** * 自定义密码脱敏策略 * @author binbin.hou * date 2019/1/17 * @since 0.0.4 */ @Inherited @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @SensitiveStrategy(CustomPasswordStrategy.class) public @interface SensitiveCustomPasswordStrategy { }
脱敏生效条件
/** * 自定义密码脱敏策略生效条件 * @author binbin.hou * date 2019/1/17 * @since 0.0.4 */ @Inherited @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @SensitiveCondition(ConditionFooPassword.class) public @interface SensitiveCustomPasswordCondition{ }
TIPS
@SensitiveStrategy 策略多带带使用的时候,默认是生效的。
如果有 @SensitiveCondition 注解,则只有当条件满足时,才会执行脱敏策略。
@SensitiveCondition 只会对系统内置注解和自定义注解生效,因为 @Sensitive 有属于自己的策略生效条件。
策略优先级
@Sensitive 优先生效,然后是系统内置注解,最后是用户自定义注解。
对应的实现两个元注解 @SensitiveStrategy、@SensitiveCondition 分别指定了对应的实现。
CustomPasswordStrategy.java
public class CustomPasswordStrategy implements IStrategy { @Override public Object des(Object original, IContext context) { return "**********************"; } }
ConditionFooPassword.java
/** * 让这些 123456 的密码不进行脱敏 * @author binbin.hou * date 2019/1/2 * @since 0.0.1 */ public class ConditionFooPassword implements ICondition { @Override public boolean valid(IContext context) { try { Field field = context.getCurrentField(); final Object currentObj = context.getCurrentObject(); final String name = (String) field.get(currentObj); return !name.equals("123456"); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } }定义测试对象
定义一个使用自定义注解的对象。
public class CustomPasswordModel { @SensitiveCustomPasswordCondition @SensitiveCustomPasswordStrategy private String password; @SensitiveCustomPasswordCondition @SensitiveStrategyPassword private String fooPassword; //其他方法 }测试
/** * 自定义注解测试 */ @Test public void customAnnotationTest() { final String originalStr = "CustomPasswordModel{password="hello", fooPassword="123456"}"; final String sensitiveStr = "CustomPasswordModel{password="**********************", fooPassword="123456"}"; CustomPasswordModel model = buildCustomPasswordModel(); Assert.assertEquals(originalStr, model.toString()); CustomPasswordModel sensitive = SensitiveUtil.desCopy(model); Assert.assertEquals(sensitiveStr, sensitive.toString()); Assert.assertEquals(originalStr, model.toString()); }
构建对象的方法如下:
/** * 构建自定义密码对象 * @return 对象 */ private CustomPasswordModel buildCustomPasswordModel(){ CustomPasswordModel model = new CustomPasswordModel(); model.setPassword("hello"); model.setFooPassword("123456"); return model; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73063.html
摘要:项目介绍日志脱敏是常见的安全需求。特性基于注解的日志脱敏可以自定义策略实现,策略生效条件常见的脱敏内置方案深拷贝,且原始对象不用实现任何接口。放在集合属性上,且属性为普通对象作为演示,集合中为普通的字符串。 项目介绍 日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强。编写起来又特别麻烦。 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。 用户也可以...
摘要:注解有以下几个知识点元数据注解的分类内置注解自定义注解注解处理器本文先介绍前面个知识点元数据注解的分类内置注解自定义注解。注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。 大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解。showImg(https://segme...
摘要:特性支持过程式编程基于字节码的代理重试基于注解的重试,允许自定义注解无缝接入接口与注解的统一解决与中的不足之处设计目的综合了和的优势。基于字节码实现的代理重试,可以不依赖。提供基于代码模式字节码增强实现的方式。 Sisyphus 支持过程式编程和注解编程的 java 重试框架。 特性 支持 fluent 过程式编程 基于字节码的代理重试 基于注解的重试,允许自定义注解 无缝接入 sp...
摘要:我自己总结的学习的系统知识点以及面试问题,已经开源,目前已经。目前最新的版本中模块的组件已经被废弃掉,同时增加了用于异步响应式处理的组件。每一次请求都会产生一个新的,该仅在当前内有效。显而易见,这种模式存在很多问题。 我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://githu...
阅读 3003·2023-04-26 00:49
阅读 3659·2021-09-29 09:45
阅读 880·2019-08-29 18:47
阅读 2688·2019-08-29 18:37
阅读 2695·2019-08-29 16:37
阅读 3272·2019-08-29 13:24
阅读 1740·2019-08-27 10:56
阅读 2323·2019-08-26 11:42