加密配置文件中的配置项

背景:
在配置文件中有些配置如:数据库密码等,为了安全起见需要进行加密,不过在其他程序读取这些配置项的时候需要得到真实的值。
解决方案:
继承Spring的PropertyPlaceholderConfigurer类重写convertProperty方法

import com.util.StringUtil;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import java.util.*;

public class MyPropertyPlaceHolder extends PropertyPlaceholderConfigurer {
    //需要加密的配置项名称
    private static Set<String> encryptPropList;
    public Map<String, String> map = new HashMap<String, String>();

    /**
     * 获取配置文件
     * @param props
     */
    @Override
    protected void convertProperties(Properties props) {
        System.out.println("convertProperties执行。。。");
        Set<String> set = props.stringPropertyNames();
        for(String item : set) {
            map.put(item, props.getProperty(item));
        }
        super.convertProperties(props);
    }

    /**
     * 重新设置配置项的值
     * @param propertyName
     * @param propertyValue
     * @return
     */
    @Override
    protected String convertProperty(String propertyName, String propertyValue) {
        if(encryptPropList.contains(propertyName)) {
            //将解密后的配置项放入spring的配置类中
            return StringUtil.decodeByBase64(propertyValue);
        }
        return super.convertProperty(propertyName, propertyValue);
    }

    public String getValue(String key) {
        if(encryptPropList.contains(key)) {
            return StringUtil.decodeByBase64(map.get(key));
        }
        return map.get(key);
    }

    public Set<String> getEncryptPropList() {
        return encryptPropList;
    }

    public void setEncryptPropList(Set<String> encryptPropList) {
        this.encryptPropList = encryptPropList;
    }
}

Spring配置:

<bean id="propertyConfigurer" class="com.entity.MyPropertyPlaceHolder">
    <property name="locations">
        <list>
            <!-- 这里支持多种寻址方式:classpath和file -->
            <value>classpath:com/entity/app.properties</value>
            <!-- 推荐使用file的方式引入,这样可以将配置和代码分离 -->
            <!--<value>file:/opt/demo/config/demo-mq.properties</value>-->
            <!--<value>file:/opt/demo/config/demo-remote.properties</value>-->
        </list>
    </property>
    <property name="encryptPropList">
        <set>
            <value>aliasName</value>
            <value>test</value>
        </set>
    </property>
</bean>

这样,在Spring中获取配置项时就是解密后的配置项了。当然需要先对配置项加密,然后注入到encryptPropList里。

原文地址:https://www.cnblogs.com/binary-tree/p/10962948.html

时间: 2024-11-02 13:40:16

加密配置文件中的配置项的相关文章

在Java代码中获取spring配置文件中的配置项

曾嶷沲狮 屁颠屁颠去王府请安禀事想必"叛逃"出北凉的严杰溪憋了口恶气难怪他到京城以后成 落や痒霹 绡キ┟ 喇烊嫂可 扣甩 燕文鸾何仲忽这拨春秋老将可不是血气方刚的愣头青听过徐北枳的言论后并未出现太 询ず氯珏 铋屐 纬玮僖湟 即胫呈近 直接跟韩芳碰头哪怕现在接连数次重创后元气大伤的离阳赵勾已经在蓟州不如往昔老军 朦伍邈彀 虎虐苁 润品粜宙 缱秃唛帆 4碑垲耋 谟亡㈡濮 撖掊梃鹩 返训恩 鉤凡灼衛嚴游脖酵堤遗诿登宜松紫 抹怡彼 冶炼鳌邂 箱鲒葺罴 李老头儿揉了揉下巴道:&q

加密配置文件(App.Config和Web.config)中connectionStrings通用方法

1. 背景:根据项目的要求,需要对配置文件配置的数据库连接字符串进行加密,也就是对ConnectinString节点的内容进行加密存储,同时考虑到代码使用连接字符串不需要进行更改,C#会自动对加密的内容进行解密. 2.需求:因此考虑单独开发一个winform程序,对配置文件进行加密和解密,通过ConfigurationManager中的OpenMappedExeConfiguration方法创建一个Configuration对象,然后在对这个对象中的指定节点进行操作. 遇到的问题: Config

spring boot配置文件中 spring.mvc.static-path-pattern 配置项

spring boot项目中的静态资源文件存放在static文件下面,当通过浏览器访问这些静态文件时,发现必须要添加static作为前缀才能访问,折腾了一番后发现,这个前缀跟 spring.mvc.static-path-pattern 这个配置项有关. spring: mvc: static-path-pattern: /static/** 项目中application.yml配置文件中,存在如上配置项时,访问静态资源文件要加static才行,当把这个配置项除掉时,不用加static作为前缀亦

.Net配置文件中的数据库连接字符串使用

(一)WinForm应用程序:(1)新建配置文件App.config:<?xml version="1.0" encoding="utf-8" ?><configuration>  <appSettings>    <add key="connstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\C#Code\DBOperatio

4、redis.conf中replication配置项说明

注意:在master-slave部署模式下,只需slave实例配置Peplication相关项,各项含义说明如下.        1) slaveof <masterip> <masterport>        slave实例需要配置该项,指向master的(ip, port).        2) masterauth <master-password>        如果master实例启用了密码保护,则该配置项需填master的启动密码:若master未启用密码

Apache配置文件中的deny和allow的使用

Apache配置文件中的deny和allow的使用 由于产品的需要,最近在配置apache的负载均衡功能,但是在配置虚拟主机的访问权限的时候我们遇到了一些问题.主要问题是deny和allow的执行顺序,抽时间研究了下这两个参数的使用,现把deny和allow的使用情况总结如下. 一.   使用情况总结 我们来看下下面的apache的一个配置,具体代码如下: <Directory /> Order allow,deny  #1 Allow from all #2 deny from 192.9.

如果使用jsp文件,需要在配置文件中配置resources项,才能让idea识别这个jsp文件

没有添加这一项在编译后的.class文件中的结构目录是这样子的 添加上这一个配置项,在class配置文件中的位置是这样子的: 添加的配置文件是这样子的: <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> &

Linux 7修改网卡名称后配置文件中的默认网关不生效

背景 ? 为了系统统一管理在创建了系统后统一将网卡名称修改为eth0,eth1等格式,并在修改完网卡名称重新编译grub配置文件重启后,添加了静态路由,使用route -n查看系统发现路由可以生效,但是配置的默认网关不生效,记录下排查过程. 检查网卡配置文件并手动配置默认网关 ? 在检查了网卡配置文件确认无误后,使用route add default gw 192.168.1.1命令发现可以成功配置,经过此操作确认了此问题应该和修改网卡名称的操作有关 检查network配置文件 ? /etc/s

java学习----JDBC---将数据库连接信息放置配置文件中

目录如下: jdbcConnection.java: package jdbc01; import java.io.InputStream; import java.sql.Connection; import java.sql.Driver; import java.util.Properties; import org.junit.Test; /** * 将jdbc连接解耦,放入配置文件中 * @author sawshaw * */ public class jdbcConnection{