项目介绍:redacted-compiler-plugin
项目概述
redacted-compiler-plugin
是一个多平台的 Kotlin 编译器插件,旨在生成具有隐匿功能的 toString()
方法。项目灵感来源于 AutoValue 的 auto-value-redacted
扩展。这个插件的核心功能是通过定义 @Redacted
注解,帮助开发者在 Kotlin 项目中隐藏特定的信息,从而提高数据的安全性。
使用指南
要在项目中使用 redacted-compiler-plugin
,需要包含 Gradle 插件,定义一个 @Redacted
注解,并将其应用到希望隐匿的属性上。例如:
@Retention(SOURCE)
@Target(PROPERTY)
annotation class Redacted
data class User(val name: String, @Redacted val phoneNumber: String)
在上述示例中,当调用 toString()
方法时,@Redacted
注解标记的属性将被隐藏:
User(name=Bob, phoneNumber=██)
如果这个注解被应用到了类上,那么 toString()
方法会输出一个替代字符串来代表整个类:
@Retention(SOURCE)
@Target(CLASS)
annotation class Redacted
@Redacted
data class SensitiveData(val ssn: String, val birthday: String)
SensitiveData(██)
安装
通过在 build.gradle
文件中添加插件:
plugins {
id("dev.zacsweers.redacted") version <version>
}
这将自动添加多平台的 -annotations
工件,其中包含你可以直接使用的 @Redacted
注解。
配置选项
开发者可以通过 redacted
扩展自定义插件的行为,例如:
- 定义自定义的隐匿注解和未隐匿注解
- 设置是否启用插件(可根据动态构建配置进行控制)
- 定义隐匿时的替代字符串
redacted {
redactedAnnotation = "dev/zacsweers/redacted/annotations/Redacted" // 默认值
unredactedAnnotation = "dev/zacsweers/redacted/annotations/Unredacted" // 默认值
enabled = true // 默认值
replacementString = "██" // 默认值
}
支持平台
此编译器插件支持所有多平台项目类型,并且提供的注解工件也是多平台的,同时支持常见 JVM、JS 和原生目标。
注意事项
- Kotlin 编译器插件的 API 并不稳定!虽然编译结果应该是稳定的,但在新版
kotlinc
中的使用可能无法保证稳定性。 - 目前不支持 IDE 的支持。
高级用法
在某些需要将所有信息隐匿并选择性地显露部分信息的场景下,可以使用下面两种方法:
类隐匿
对需要隐匿大量字段的类,可以应用 @Redacted
注解,并仅显露某些字段:
@Redacted
data class User(@Unredacted val name: String, val phoneNumber: String, val ssn: String)
输出结果:
User(name=Bob, phoneNumber=██, ssn=██)
超类型隐匿
在需要确保某 API 仅接受隐匿输入的情况下,可以将 @Redacted
应用于父接口:
@Redacted
interface RedactedObject
data class User(@Unredacted val name: String, val phoneNumber: String, val ssn: String) : RedactedObject
输出结果:
User(name=Bob, phoneNumber=██, ssn=██)
版权说明
该项目由 Zac Sweers 于 2018 年创建,且根据 Apache 2.0 许可协议发布。开发者可以在协议范围内自由使用此插件。