springboot配置文件属性加密

1.非springboot系统属性加密,也就是自己自定义的属性,可以获取到加密属性之后解密,我用MD5加密演示的解密。

 //获取 application.properties中自定义的 storePassword属性值可以给他加密
@Value("${storePassword}")
    private String password;

// 表示在创建该bean之时自动执行
    @PostConstruct
    public void init() {
        // 调用我们自己的解密方法,这里解密自定义的属性
        password = MD5Util.MD5((password));
    }

2.springboot的系统属性值加密

//给springboot系统属性加密
//如下:
spring.datasource.username={decry}cm9vdA==
spring.datasource.password={decry}SHdqMjAxOCE=

<!--springboot配置系统文件的属性值加密的依赖-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>



/**
 * 加密属性检测类
 */
import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyDetector;

public class MyEncryptablePropertyDetector implements EncryptablePropertyDetector {
    public static final String encodePasswordPrefix = "{decry}";

    public MyEncryptablePropertyDetector() {
        super();
    }

    //如果属性的字符开头为"{decry}",返回true ,表明属性是加密过的
    @Override
    public boolean isEncrypted(String s) {
        if (s != null) {
            return s.startsWith(encodePasswordPrefix);
        }
        return false;
    }

    //该方法告诉工具,如何将自定义前缀去除
    @Override
    public String unwrapEncryptedValue(String s) {
        return s.substring(encodePasswordPrefix.length());
    }
}


/**
 * 解密类
 */
import com.hwj.pjname.common.DecryptProperties.encrypt.EncryptAndDecryptUtils;
import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyResolver;
public class MyEncryptablePropertyResolver implements EncryptablePropertyResolver {
    public MyEncryptablePropertyResolver() {
        super();
    }
    //自定义解密方法
    @Override
    public String resolvePropertyValue(String s) {
        if (null != s && s.startsWith(MyEncryptablePropertyDetector.encodePasswordPrefix)) {
            //return PasswordUtil.decode(s.substring(MyEncryptablePropertyDetector.encodePasswordPrefix.length()));
            return EncryptAndDecryptUtils.base64Decrypt(s.substring(MyEncryptablePropertyDetector.encodePasswordPrefix.length()));
        }
        return s;
    }
}

//入口类添加该注解,开启属性自动解密码功能
//参考  https://github.com/ulisesbocchio/jasypt-spring-boot-samples/tree/master/jasypt-spring-boot-demo
@EnableEncryptableProperties
public class HwjpjApplication extends SpringBootServletInitializer {
    //  注册这两个bean,加密属性检测类
    @Bean(name = "encryptablePropertyDetector")
    public EncryptablePropertyDetector encryptablePropertyDetector() {
        return new MyEncryptablePropertyDetector();
    }
    //属性解密类
    @Bean(name = "encryptablePropertyResolver")
    public EncryptablePropertyResolver encryptablePropertyResolver() {
        return new MyEncryptablePropertyResolver();
    }
    public static void main(String[] args) {
        SpringApplication.run(HwjpjApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
        return builder.sources(HwjpjApplication.class);
    }

}

 

posted @ 2019-08-30 23:31  Angry-rookie  阅读(1879)  评论(0)    收藏  举报