From 579a2e2e354887adc67f7ad12a334230b980e875 Mon Sep 17 00:00:00 2001 From: zihluwang Date: Wed, 4 Jun 2025 21:07:16 +0800 Subject: [PATCH] feat: remove deprecated module `property-guard-spring-boot-starter` --- property-guard-spring-boot-starter/README.md | 37 ----- .../build.gradle.kts | 132 ------------------ .../autoconfiguration/PropertyGuard.java | 122 ---------------- .../main/resources/META-INF/spring.factories | 1 - .../src/main/resources/logback.xml | 32 ----- settings.gradle.kts | 1 - 6 files changed, 325 deletions(-) delete mode 100644 property-guard-spring-boot-starter/README.md delete mode 100644 property-guard-spring-boot-starter/build.gradle.kts delete mode 100644 property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java delete mode 100644 property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories delete mode 100644 property-guard-spring-boot-starter/src/main/resources/logback.xml diff --git a/property-guard-spring-boot-starter/README.md b/property-guard-spring-boot-starter/README.md deleted file mode 100644 index 32cc31f..0000000 --- a/property-guard-spring-boot-starter/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Property Guard - -`property-guard-spring-boot-starter` is a utility that can help you protect secret values in Spring Boot configurations. - -## Example usage - -### 1. Implementation this module - -```kotlin -dependencies { - implementation(platform("com.onixbyte:devkit-bom:$devKitVersion")) - implementation("com.onixbyte:devkit-utils") - implementation("com.onixbyte:property-guard-spring-boot-starter") -} -``` - -### 2. Generate a secret - -Use the following codes to get a random secret. - -```java -@SpringBootTest -class SpringBootApplicationTest { - - @Test - void contextLoads() { - System.out.println(AesUtil.generateRandomSecret()); // Output: a 16-char long secret - } -} -``` - -Or you can write a 16-char long secret by yourself. - -### 3. Encrypt your secret properties and place them into your configuration file - -### 4. Run application with parameter `--pg.key=$your_secret` - diff --git a/property-guard-spring-boot-starter/build.gradle.kts b/property-guard-spring-boot-starter/build.gradle.kts deleted file mode 100644 index da71a45..0000000 --- a/property-guard-spring-boot-starter/build.gradle.kts +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2024-2025 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.URI - -plugins { - java - id("java-library") - id("maven-publish") - id("signing") -} - -val artefactVersion: String by project -val projectUrl: String by project -val projectGithubUrl: String by project -val licenseName: String by project -val licenseUrl: String by project - -group = "com.onixbyte" -version = artefactVersion - -repositories { - mavenCentral() -} - -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - withSourcesJar() - withJavadocJar() -} - -tasks.withType { - options.encoding = "UTF-8" -} - -tasks.withType { - exclude("logback.xml") -} - -dependencies { - compileOnly(libs.slf4j) - implementation(libs.logback) - api(project(":devkit-core")) - api(project(":devkit-utils")) - implementation(libs.springBoot.autoconfigure) - implementation(libs.springBoot.starter.logging) - implementation(libs.springBoot.configurationProcessor) - - testImplementation(platform(libs.junit.bom)) - testImplementation(libs.junit.jupiter) - testImplementation(libs.springBoot.starter.test) -} - -tasks.test { - useJUnitPlatform() -} - -publishing { - publications { - create("propertyGuardSpringBootStarter") { - groupId = group.toString() - artifactId = "property-guard-spring-boot-starter" - version = artefactVersion - - pom { - name = "Property Guard Spring Boot Starter" - description = "This module is made for protecting your secret properties in your spring application properties." - url = projectUrl - - licenses { - license { - name = licenseName - url = licenseUrl - } - } - - scm { - connection = "scm:git:git://github.com:OnixByte/JDevKit.git" - developerConnection = "scm:git:git://github.com:OnixByte/JDevKit.git" - url = projectGithubUrl - } - - developers { - developer { - id = "zihluwang" - name = "Zihlu Wang" - email = "really@zihlu.wang" - timezone = "Asia/Hong_Kong" - } - - developer { - id = "siujamo" - name = "Siu Jam'o" - email = "jamo.siu@outlook.com" - timezone = "Asia/Shanghai" - } - } - } - - from(components["java"]) - - signing { - sign(publishing.publications["propertyGuardSpringBootStarter"]) - } - } - - repositories { - maven { - name = "sonatypeNexus" - url = URI(providers.gradleProperty("repo.maven-central.host").get()) - credentials { - username = providers.gradleProperty("repo.maven-central.username").get() - password = providers.gradleProperty("repo.maven-central.password").get() - } - } - } - } -} \ No newline at end of file diff --git a/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java b/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java deleted file mode 100644 index 7a182d0..0000000 --- a/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2024-2025 OnixByte. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.onixbyte.propertyguard.autoconfiguration; - -import com.onixbyte.devkit.utils.AesUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.boot.env.OriginTrackedMapPropertySource; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.SimpleCommandLinePropertySource; - -import java.security.GeneralSecurityException; -import java.util.HashMap; -import java.util.Optional; - -/** - * {@code PropertyGuard} is a utility class designed for encrypting configuration properties in - * Spring Boot applications. - *

- * Spring Boot applications often need to store sensitive configuration details such as database - * passwords, API keys, etc. To ensure that these sensitive pieces of information are not exposed - * to the public, developers can utilize the {@code PropertyGuard} class to encrypt and store them - * within configuration files. - *

- * Usage - * You need a 16-char long secret for encrypting a configuration property. You can get this secret - * on your own, or use the helper utility class by the following code: - *

{@code
- * var secret = AesUtil.generateRandomSecret(); // Let's presume the result is "3856faef0d2d4f33"
- * }
- *

- * Then, in {@code application.yml} or {@code application.properties}, change the original value - * from plain text to encrypted value with the prefix "pg:". - *

{@code
- * # original
- * app.example-properties=Sample Value
- *
- * # encrypted with key 3856faef0d2d4f33
- * app.example-properties=pg:t4YBfv8M9ZmTzWgTi2gJqg==
- * }
- * After that, before running, you need to add the command line arguments "pg.key" as the following - * codes: {@code --pg.key=}. - *

- * This class is extracted from MyBatis-Plus. - * - * @author hubin@baomidou - * @version 1.1.0 - * @see EnvironmentPostProcessor - * @since 1.1.0 (3.3.2 of MyBatis-Plus) - */ -@Deprecated(forRemoval = true) -public class PropertyGuard implements EnvironmentPostProcessor { - - private final static Logger log = LoggerFactory.getLogger(PropertyGuard.class); - - /** - * Create a {@link PropertyGuard} instance. - */ - public PropertyGuard() { - } - - /** - * Process the encryption environment variables. - * - * @param environment the environment to post-process - * @param application the application to which the environment belongs - */ - @Override - public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { - // Get the key for encryption from command line. - var encryptionKey = ""; - for (var ps : environment.getPropertySources()) { - if (ps instanceof SimpleCommandLinePropertySource source) { - encryptionKey = source.getProperty("%s.key".formatted(PREFIX)); - break; - } - } - - if (Optional.ofNullable(encryptionKey).map((key) -> !key.isEmpty()).orElse(false)) { - var map = new HashMap(); - for (var propertySources : environment.getPropertySources()) { - if (propertySources instanceof OriginTrackedMapPropertySource source) { - for (var name : source.getPropertyNames()) { - if (source.getProperty(name) instanceof String str) { - if (str.startsWith("%s:".formatted(PREFIX))) { - try { - map.put(name, AesUtil.decrypt(str.substring(3), encryptionKey)); - } catch (GeneralSecurityException e) { - log.error("Unable to decrypt param {}", name); - } - } - } - } - } - } - // Put the decrypted data into environment variables, and made them at top-level. - if (!map.isEmpty()) { - environment.getPropertySources().addFirst(new MapPropertySource("custom-encrypt", map)); - } - } - } - - private static final String PREFIX = "pg"; -} diff --git a/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories b/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 4545f73..0000000 --- a/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.env.EnvironmentPostProcessor=com.onixbyte.propertyguard.autoconfiguration.PropertyGuard \ No newline at end of file diff --git a/property-guard-spring-boot-starter/src/main/resources/logback.xml b/property-guard-spring-boot-starter/src/main/resources/logback.xml deleted file mode 100644 index 6d26440..0000000 --- a/property-guard-spring-boot-starter/src/main/resources/logback.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - ${COLOURFUL_OUTPUT} - - - - - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 383643d..7d5b157 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -29,6 +29,5 @@ include( "simple-jwt-facade", "simple-jwt-authzero", "simple-jwt-spring-boot-starter", - "property-guard-spring-boot-starter", "simple-serial-spring-boot-starter" )