spring jdbc配置文件加密解密

例子如下:

#加密前
#datasource.type=mysql
#datasource.driverClassName=com.mysql.jdbc.Driver
#datasource.url=jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8
#datasource.username=root
#datasource.password=root
#加密后
datasource.type=2DF0ADA00FAA99D2
datasource.driverClassName=DFB084E48D901F11SDQXB6DEEEA685621CEAB85E65590
datasource.url=CD1E7D3A7DEED845CC284EB8AB50F88E1XCXC2E87A3F36434640EA07523DB201ACF884EF00CBBAD67FB52A04960D6C3E91E3EABF370CE3E6FACD06915D92108869CBB9
datasource.username=63AEB7FA5F01BC70
datasource.password=63AEB7FA5F01BC70


<!-- 对JDBC配置进行解密  --> 
    <bean id="propertyConfigurer" class="xxx.security.EncryptablePropertyPlaceholderConfigurer">  
            <property name="locations">
                <list>
                    <value>classpath:conf/jdbc.properties</value>
                    <value>classpath:conf/memcache.properties</value>
                </list>
            </property>
    </bean>
       
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close" >
        <property name="driverClass">
            <value>${datasource.driverClassName}</value>
        </property>

        <property name="jdbcUrl">
            <value>${datasource.url}</value>
        </property>
        <property name="user">
            <value>${datasource.username}</value>
        </property>
        <property name="password">
            <value>${datasource.password}</value>
        </property>

        <property name="minPoolSize">
            <value>${datasource.c3p0.minPoolSize}</value>
        </property>

        <property name="maxPoolSize">
            <value>${datasource.c3p0.maxPoolSize}</value>
        </property>

        <property name="maxIdleTime">
            <value>${datasource.c3p0.maxIdleTime}</value>
        </property>

        <property name="acquireIncrement">
            <value>${datasource.c3p0.acquireIncrement}</value>
        </property>
        <property name="maxStatements">
            <value>${datasource.c3p0.maxStatements}</value>
        </property>
        <property name="initialPoolSize">
            <value>${datasource.c3p0.initialPoolSize}</value>
        </property>

        <property name="idleConnectionTestPeriod">
            <value>${datasource.c3p0.idleConnectionTestPeriod}</value>
        </property>

        <property name="numHelperThreads">
            <value>${datasource.c3p0.numHelperThreads}</value>
        </property>

        <property name="acquireRetryAttempts">
            <value>${datasource.c3p0.acquireRetryAttempts}</value>
        </property>

        <property name="breakAfterAcquireFailure">
            <value>${datasource.c3p0.breakAfterAcquireFailure}</value>
        </property>
        <property name="testConnectionOnCheckout">
            <value>${datasource.c3p0.testConnectionOnCheckout}</value>
        </property>
    </bean>

JAVA类加密,解密类如下:

import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import cn.com.dbappsecurity.common.utils.DesEncrypt;
import cn.com.dbappsecurity.common.utils.MyWebConstant;

public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    private static final String key = MyWebConstant.JDBC_DESC_KEY;

    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
        throws BeansException {
            try {
//                DesEncrypt des = new DesEncrypt();
                String username = props.getProperty(MyWebConstant.JDBC_DATASOURCE_USERNAME_KEY);
                if (username != null) {
                    props.setProperty(MyWebConstant.JDBC_DATASOURCE_USERNAME_KEY, DesEncrypt.Decrypt(username, DesEncrypt.hex2byte(key)));
                }
                
                String password = props.getProperty(MyWebConstant.JDBC_DATASOURCE_PASSWORD_KEY);
                if (password != null) {
                    props.setProperty(MyWebConstant.JDBC_DATASOURCE_PASSWORD_KEY, DesEncrypt.Decrypt(password, DesEncrypt.hex2byte(key)));
                }
                
                String url = props.getProperty(MyWebConstant.JDBC_DATASOURCE_URL_KEY);
                if (url != null) {
                    props.setProperty(MyWebConstant.JDBC_DATASOURCE_URL_KEY, DesEncrypt.Decrypt(url, DesEncrypt.hex2byte(key)));
                }
                
                String driverClassName = props.getProperty(MyWebConstant.JDBC_DATASOURCE_DRIVERCLASSNAME_KEY);
                if(driverClassName != null){
                    props.setProperty(MyWebConstant.JDBC_DATASOURCE_DRIVERCLASSNAME_KEY, DesEncrypt.Decrypt(driverClassName, DesEncrypt.hex2byte(key)));
                }
                String dbtype = props.getProperty(MyWebConstant.JDBC_DATASOURCE_TYPE_KEY);
                if(dbtype != null){
                    props.setProperty(MyWebConstant.JDBC_DATASOURCE_TYPE_KEY, DesEncrypt.Decrypt(dbtype, DesEncrypt.hex2byte(key)));
                }
                super.processProperties(beanFactory, props);
            } catch (Exception e) {
                e.printStackTrace();
                throw new BeanInitializationException(e.getMessage());
            }
        }
    }

相关静态参数类

/******************************JDBC相关BEGIN***************************************/
    public static final String JDBC_DESC_KEY = "0001000200030004";
    
    /**数据库类型**/
    public static final String JDBC_DATASOURCE_TYPE_KEY = "datasource.type";
    
    public static final String JDBC_DATASOURCE_DRIVERCLASSNAME_KEY = "datasource.driverClassName";
    
    public static final String JDBC_DATASOURCE_URL_KEY = "datasource.url";
    
    public static final String JDBC_DATASOURCE_USERNAME_KEY = "datasource.username";
    
    public static final String JDBC_DATASOURCE_PASSWORD_KEY = "datasource.password";
    
    /******************************JDBC相关END***************************************/

可能运行出现错误,请自己调整代码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Apache Shiro加解密Spring配置文件value的示例: 1. 引入Shiro和Jasypt的依赖 ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> <version>1.9.3</version> </dependency> ``` 2. 配置Jasypt加密算法 在Spring配置文件中,配置Jasypt加密算法及加密所需的salt值: ```xml <bean id="jasyptStringEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="algorithm"> <value>PBEWithMD5AndDES</value> </property> <property name="password"> <value>my-salt</value> </property> </bean> ``` 3. 在Spring配置文件中使用Shiro对敏感信息进行加解密Spring配置文件中,使用Shiro的加解密工具类对敏感信息进行加解密: ```xml <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="dbuser" /> <property name="password"> <bean class="org.apache.shiro.config.EncryptablePropertyPlaceholderConfigurer"> <constructor-arg ref="jasyptStringEncryptor" /> <constructor-arg value="ENC(kIuaz8c+u+DZ13GyQfzS1g==)" /> </bean> </property> </bean> ``` 其中,`ENC(kIuaz8c+u+DZ13GyQfzS1g==)`是加密后的密码,使用Shiro的`EncryptablePropertyPlaceholderConfigurer`类对其进行解密。 4. 创建Shiro的加解密工具类 ```java public class ShiroUtils { private static StringEncryptor stringEncryptor; public static void setStringEncryptor(StringEncryptor stringEncryptor) { ShiroUtils.stringEncryptor = stringEncryptor; } public static String encrypt(String plainText) { return stringEncryptor.encrypt(plainText); } public static String decrypt(String encryptedText) { return stringEncryptor.decrypt(encryptedText); } } ``` 5. 在Spring配置文件中配置Shiro的加解密工具类 ```xml <bean id="shiroUtils" class="com.example.ShiroUtils"> <property name="stringEncryptor" ref="jasyptStringEncryptor" /> </bean> ``` 6. 在Java代码中使用Shiro进行加解密 ```java String plainText = "my password"; String encryptedText = ShiroUtils.encrypt(plainText); String decryptedText = ShiroUtils.decrypt(encryptedText); ``` 以上是一个使用Apache Shiro加解密Spring配置文件value的示例,可以根据实际需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值