`
zhaoshijie
  • 浏览: 2265505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring中的数据源配置信息加密方案

阅读更多
关键字:spring中的数据源配置信息加密方案

附件是完整的实现及说明

在使用spring框架开发一些核心的系统时经常会收到客户提出重要信息加密的要求,在这里我就记录一下我实现Spring数据源配置信息JDBC属性的加密过程。
工具/原料

    JAVA开发环境
    Spring+mybatis+struts2

方法/步骤

    先在项目中新建一个加密算法类,代码如下:

    package com.cttsp.frame.util.encrypt;

    import java.security.Key;

    import java.security.SecureRandom;

    import javax.crypto.Cipher;

    import javax.crypto.KeyGenerator;

    import sun.misc.BASE64Decoder;

    import sun.misc.BASE64Encoder;

    /**

     * DES加密算法工具类

     * @author RyanCai

     * @date 2014-10-8 下午3:24:14

     */

    public class DESUtils {

    private static Key key;

        private static String KEY_STR = "myKey";// 密钥

        private static String CHARSETNAME = "UTF-8";// 编码

        private static String ALGORITHM = "DES";// 加密类型

    

        static {

            try {

                KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);

                generator.init(new SecureRandom(KEY_STR.getBytes()));

                key = generator.generateKey();

                generator = null;

            } catch (Exception e) {

                throw new RuntimeException(e);

            }

        }

    

        /**

         * 对str进行DES加密

         *

         * @param str

         * @return

         */

        public static String getEncryptString(String str) {

            BASE64Encoder base64encoder = new BASE64Encoder();

            try {

                byte[] bytes = str.getBytes(CHARSETNAME);

                Cipher cipher = Cipher.getInstance(ALGORITHM);

                cipher.init(Cipher.ENCRYPT_MODE, key);

                byte[] doFinal = cipher.doFinal(bytes);

                return base64encoder.encode(doFinal);

            } catch (Exception e) {

                throw new RuntimeException(e);

            }

        }

    

        /**

         * 对str进行DES解密

         *

         * @param str

         * @return

         */

        public static String getDecryptString(String str) {

            BASE64Decoder base64decoder = new BASE64Decoder();

            try {

                byte[] bytes = base64decoder.decodeBuffer(str);

                Cipher cipher = Cipher.getInstance(ALGORITHM);

                cipher.init(Cipher.DECRYPT_MODE, key);

                byte[] doFinal = cipher.doFinal(bytes);

                return new String(doFinal, CHARSETNAME);

            } catch (Exception e) {

                throw new RuntimeException(e);

            }

        }

    }

    继承实现一个加密配置属性处理类,代码如下:

    package com.cttsp.frame.util.encrypt;

    import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

    /**

     * 继承PropertyPlaceholderConfigurer支持密文属性的属性配置器

     * @author <姓名>

     * @date 2014-10-8 下午3:34:14

     */

    public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    private String[] encryptPropNames = { "username", "password" };

    

        @Override

        protected String convertProperty(String propertyName, String propertyValue) {

            if (isEncryptProp(propertyName)) {

                String decryptValue = DESUtils.getDecryptString(propertyValue);

                return decryptValue;

            } else {

                return propertyValue;

            }

        }

    

        /**

         * 判断是否是加密的属性

         *

         * @param propertyName

         * @return

         */

        private boolean isEncryptProp(String propertyName) {

            for (String encryptpropertyName : encryptPropNames) {

                if (encryptpropertyName.equals(propertyName))

                    return true;

            }

            return false;

        }

    }

    修改自己的jdbc属性文件,将需要加密的信息改成加密后的密文,我的配置文件如下图:
    对spring中的数据源配置信息加密

    再修改srping的配置文件,主要修改如下截图:
    对spring中的数据源配置信息加密
    5

    到这里所有的修改基本上完成了,启动项目正常连接数据库。


附件是完整的实现及说明
分享到:
评论

相关推荐

    spring配置文件加密实现

    在Spring框架中,配置文件通常包含了应用程序的重要信息,如数据库连接、bean的定义以及服务器的配置等。为了保护这些敏感信息不被非法访问或篡改,我们可以对Spring配置文件进行加密处理。本文将深入探讨如何在Java...

    Spring数据源及配置文件数据加密实现过程详解

    Spring数据源及配置文件数据加密实现过程详解 Spring Framework是Java企业级应用程序的最流行框架之一,提供了许多强大的功能来简化企业级应用程序的开发。其中,数据源(DataSource)是Spring Framework中最重要...

    Spring数据库连接等配置加密

    但一般来说,它可以是作者自定义的加密算法实现,或者是第三方库,如Jasypt,用于帮助加密和解密配置信息。 总的来说,Spring框架通过结合配置文件和解密器,可以有效地保护数据库连接等敏感信息,避免了因信息泄露...

    spring-jdbc文件数据库配置加密

    在实际应用中,通常需要配置数据源(DataSource)来建立与数据库的连接,这些配置信息包括数据库URL、用户名和密码等敏感信息。 对于这些敏感信息,安全性是不可忽视的。配置加密就是一种确保这些信息不被未授权...

    系统核心配置项加密解决方案

    为了保护这些信息不被未授权的用户访问,实施核心配置项的加密解决方案至关重要。本文将深入探讨一种基于Java的加密配置方法,通过分析`CryptPropertiesFactoryBean.java`这个文件来理解如何在源码级别实现这一功能...

    springboot多数据源配置

    "Springboot多数据源配置"是Spring Boot应用中一个重要的实践场景,它允许开发者在同一个项目中管理多个不同的数据库,例如主数据库和从数据库,或者用于不同业务逻辑的数据源。这种配置在大数据、分布式系统和...

    配置文件内容加密jasypt demo

    在Spring Boot中,我们可以利用jasypt来加密配置文件(如application.properties或application.yml)中的敏感数据,确保即使配置文件被泄露,也无法直接获取到原始的明文信息。 首先,我们需要在项目中引入jasypt的...

    spring(tomcat)前后端数据加密传输demo

    本示例项目"spring(tomcat)前后端数据加密传输demo"提供了一个基于Spring Boot和Tomcat环境的解决方案,用于演示如何实现前后端数据的加密传输。以下是这个项目中涉及的关键知识点: 1. **Spring Boot**: Spring ...

    springboot之yml配置文件信息加密.docx

    Spring Boot 之 YML 配置文件信息加密 知识点 1: Jasypt 算法介绍 Jasypt 是一个 Java 库,提供了一种简单的方式来为项目增加加密功能。Jasypt 使用的加密算法是 PBEWithMD5AndDES(对称加密),中文名“基于口令...

    spring中properties加密

    在Spring框架中,为了保护应用程序中的敏感信息,如数据库连接字符串、API密钥或任何其他配置属性,我们经常需要对这些属性进行加密。这确保了即使代码被泄露,这些关键信息也不会轻易落入他人之手。本文将深入探讨...

    Spring security 自定义密码加密方式的使用范例。

    在提供的压缩包文件"ALLSRC"中,你应该能找到一个完整的Spring Security项目,包括源代码、配置文件和依赖。通过这个项目,你可以深入理解Spring Security的工作原理,并学习如何自定义其核心组件。如果你对码云不...

    SpringBoot(七)SpringBoot整合Druid实现数据库密码加密.pdf

    本文将详细介绍如何在Spring Boot项目中整合Druid连接池,并通过非对称加密技术加密数据库密码,从而提高系统的安全性。 #### 二、项目搭建与环境准备 ##### 2.1 新建 Maven 项目 首先,我们需要使用IDEA...

    jasypt加密_spring整合.zip

    在这个"jasypt加密_spring整合.zip"压缩包中,我们将会探讨如何将Jasypt与Spring框架整合,以便在Hibernate配置文件中安全地存储敏感信息。 首先,Jasypt提供了两种主要的加密模式:强加密(Strong Encryption)和...

    Spring@PropertySource 配置文件自定义加密、自定义Yaml文件加载

    2. **自定义`ApplicationContextInitializer`**:如果你需要在Spring启动时执行自定义逻辑,如初始化加密配置,可以实现`ApplicationContextInitializer`接口并注册到Spring容器中。 3. **测试与调试**:编写单元...

    json接口的spring实例(含httpclient、加密解密)

    本示例将围绕一个基于Spring框架实现的JSON接口,结合HTTPClient库进行网络通信,并利用DES(Data Encryption Standard)加密解密技术确保数据安全。 首先,我们来看JSON接口的实现。Spring框架提供了丰富的支持来...

    spring security2配置

    3. **用户认证**:配置`UserDetailsService`,这个接口用于从数据源获取用户信息。我们可以实现这个接口,或者使用内存中的用户,JDBC用户详情服务,或者其他认证提供者。 4. **权限控制**:使用`@PreAuthorize`、`...

    springboot工程jar包加密

    在Java开发领域,Spring Boot框架的应用日益广泛,它简化了微服务的构建并提供了快速开发的能力。当一个项目被打包成jar文件后,这通常意味着它可以...在实际操作中,应结合项目需求和安全策略,选择最适合的加密方案。

    Spring Boot 中密码加密的两种方法

    Spring Boot 是一个流行的Java开发框架,它简化了创建独立、生产级别的基于Spring的应用程序。...在实际开发中,应遵循最佳实践,使用`BCryptPasswordEncoder`对用户密码进行加密,以保护用户的个人信息安全。

    proxool连接池用户名密码加密

    使用Proxool的加密功能,开发者需要在程序启动时加载加密库,并且确保在应用程序的整个生命周期内,只有拥有正确密钥的组件才能解密这些数据。这需要谨慎处理密钥的存储和分发,以防止密钥泄露。 在实际应用中,...

Global site tag (gtag.js) - Google Analytics