精华内容
下载资源
问答
  • 那么如何实现对数据库密码加密呢,,因为喜欢开源,接下来就奉献给大家。最开始的想法是通过tomcat的源码从catalina.java这个加载类开始找,看连接池是如何加载的,然后修改这个类,重新ant。后来发现了连接池用的...

    Tomcat 连接池写在server.xml里的数据用户以及密码都是明文,这样非常不安全的,如果一但知道了这个数据库名和密码获得,可想而知。

    那么如何实现对数据库密码加密呢,,因为喜欢开源,接下来就奉献给大家。

    最开始的想法是通过tomcat的源码从catalina.java这个加载类开始找,看连接池是如何加载的,然后修改这个类,重新ant。后来发现了连接池用的factory类,决定重这个类开始下手。

    如果才能把用户名或者是密码使用加密

    http://jakarta.apache.org/commons/dbcp/下载commons-dbcp源码包(一定要对用tomcat的版本),对org.apache.commons.dbcp.BasicDataSourceFactory类修改,根据"PROP_PASSWORD"RA找到如下:

    value = properties.getProperty(PROP_PASSWORD);

    if(value !=null) {

    dataSource.setPassword(value);

    }

    可以看得出来就是将配置文件中取出的密码,进行赋值给相关变量了,这个时候把准备好的加密码文件加进去,如我的加密码JAVA为Encode.java,将这个文件放在这个包下面,但要保证该Encode.java最好不引用除J2SE以外的其它包,否则还得把包给加进去,我这里改成:

    value = properties.getProperty(PROP_PASSWORD);

    if(value !=null) {

    dataSource.setPassword(Encode.decode(value));

    }

    就表示对从数据源配置中取过来的密码进行解密了,这个时候可见数据源配置中密码如下:

    password

    1f65866187612115

    当然这里的密码是采用上面提到的Encode.java的encode进行加密码的,与decode是可逆的,这样才可以正确解密。

    另外说明一下,从官方网站下载下来的源程序,采用ANT并不一定可以直接编译,我这里就是这种情况,编译的时候把错,将其导入ECLIPSE工程中,并加入相关POOL包,通过ANT也编译不过去,我猜想可能是ANT版本的原因,因为后面的我把"工程->自动编译..."给勾上后,自动编译过去,将这两个类BasicDataSourceFactory和Encode拷贝出来,将原来的包用WINRAR打开,放到其路径中。另外这外commons-dbcp-1.2.2.jar放到server/lib下面不行,至少我这边就不行,我的TOMCAT是5.0,我前面一直在这里找这个包都没有找到,但是我看数据源却是采用的BasicDataSourceFactory,后来动用了UE才搜索出来,原来在common的lib下面,将其拷贝进去,重启TOMCAT登陆,OK。

    展开全文
  • 在Tomcat服务器使用当中,我们经常会碰到各种错误原因和稀奇古怪的问题,就当最简单的“Tomcat数据库连接池数据库密码加密”来说吧,碰到这种问题该怎么解决呢?我们先看一段加密的Java工具类: package ...

    在Tomcat服务器使用当中,我们经常会碰到各种错误原因和稀奇古怪的问题,就当最简单的“Tomcat数据库连接池数据库密码加密”来说吧,碰到这种问题该怎么解决呢?我们先看一段加密的Java工具类:

    package com.vajra.security.encrypt;  
      
    import java.io.IOException;  
    import java.io.UnsupportedEncodingException;  
    import java.security.InvalidAlgorithmParameterException;  
    import java.security.InvalidKeyException;  
    import java.security.NoSuchAlgorithmException;  
    import java.security.spec.AlgorithmParameterSpec;  
    import java.security.spec.InvalidKeySpecException;  
      
    import javax.crypto.BadPaddingException;  
    import javax.crypto.Cipher;  
    import javax.crypto.IllegalBlockSizeException;  
    import javax.crypto.NoSuchPaddingException;  
    import javax.crypto.SecretKey;  
    import javax.crypto.SecretKeyFactory;  
    import javax.crypto.spec.PBEKeySpec;  
    import javax.crypto.spec.PBEParameterSpec;  
      
    import sun.misc.BASE64Decoder;  
    import sun.misc.BASE64Encoder;  
      
    //Java加密工具类操作,@auther http://www.23tiyan.com
    public class CipherEncrypter {  
        Cipher ecipher;  
        Cipher dcipher;  
        byte[] salt = { -87, -101, -56, 50, 86, 53, -29, 3 };  
      
        int iterationCount = 19;  
        private static CipherEncrypter cipherEncrypter;  
      
        private CipherEncrypter(String passPhrase) {  
            try {  
                PBEKeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray());  
                SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES")  
                        .generateSecret(keySpec);  
                this.ecipher = Cipher.getInstance(key.getAlgorithm());  
                this.dcipher = Cipher.getInstance(key.getAlgorithm());  
      
                AlgorithmParameterSpec paramSpec = new PBEParameterSpec(this.salt,  
                        this.iterationCount);  
      
                this.ecipher.init(1, key, paramSpec);  
                this.dcipher.init(2, key, paramSpec);  
            } catch (InvalidAlgorithmParameterException localInvalidAlgorithmParameterException) {  
            } catch (InvalidKeySpecException localInvalidKeySpecException) {  
            } catch (NoSuchPaddingException localNoSuchPaddingException) {  
            } catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {  
            } catch (InvalidKeyException localInvalidKeyException) {  
            }  
        }  
      
        private CipherEncrypter() {  
            this("sfpay");  
        }  
      
        public static CipherEncrypter getInstance() {  
            if (cipherEncrypter == null) {  
                cipherEncrypter = new CipherEncrypter();  
            }  
            return cipherEncrypter;  
        }  
      
        public static String encrypt(String str) {  
            try {  
                byte[] utf8 = str.getBytes("UTF8");  
                byte[] enc = getInstance().ecipher.doFinal(utf8);  
                return new BASE64Encoder().encode(enc);  
            } catch (BadPaddingException localBadPaddingException) {  
            } catch (IllegalBlockSizeException localIllegalBlockSizeException) {  
            } catch (UnsupportedEncodingException localUnsupportedEncodingException) {  
            } catch (Exception localException) {  
            }  
            return null;  
        }  
      
        public static String decrypt(String str) {  
            try {  
                byte[] dec = new BASE64Decoder().decodeBuffer(str);  
      
                byte[] utf8 = getInstance().dcipher.doFinal(dec);  
      
                return new String(utf8, "UTF8");  
            } catch (BadPaddingException localBadPaddingException) {  
            } catch (IllegalBlockSizeException localIllegalBlockSizeException) {  
            } catch (UnsupportedEncodingException localUnsupportedEncodingException) {  
            } catch (IOException localIOException) {  
            }  
            return null;  
        }  
      
        public static void main(String[] args) {  
            if (args.length != 1)  
                return;  
            System.out.println("encrypted string:" + encrypt(args[0]));  
        }  
    }

    而且要知道,在整个运行流程当中,必不可少的就是Factory中实现数据库密码解密方法:

    package com.vajra.security.datasource;  
      
    import java.io.ByteArrayInputStream;  
    import java.sql.SQLException;  
    import java.util.Collections;  
    import java.util.Enumeration;  
    import java.util.Hashtable;  
    import java.util.Properties;  
    import java.util.StringTokenizer;  
      
    import javax.naming.Context;  
    import javax.naming.Name;  
    import javax.naming.RefAddr;  
    import javax.naming.Reference;  
    import javax.sql.DataSource;  
      
    import org.apache.tomcat.dbcp.dbcp.BasicDataSource;  
    import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;  
      
    import com.vajra.security.encrypt.CipherEncrypter;  
      
    //数据库配置链接,@auther http://www.23tuzi.com
    @SuppressWarnings("rawtypes")  
    public class VajraBasicDataSourceFactory extends BasicDataSourceFactory {  
      
        protected static final String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit";  
        protected static final String PROP_DEFAULTREADONLY = "defaultReadOnly";  
        protected static final String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation";  
        protected static final String PROP_DEFAULTCATALOG = "defaultCatalog";  
        protected static final String PROP_DRIVERCLASSNAME = "driverClassName";  
        protected static final String PROP_MAXACTIVE = "maxActive";  
        protected static final String PROP_MAXIDLE = "maxIdle";  
        protected static final String PROP_MINIDLE = "minIdle";  
        protected static final String PROP_INITIALSIZE = "initialSize";  
        protected static final String PROP_MAXWAIT = "maxWait";  
        protected static final String PROP_TESTONBORROW = "testOnBorrow";  
        protected static final String PROP_TESTONRETURN = "testOnReturn";  
        protected static final String PROP_TIMEBETWEENEVICTIONRUNSMILLIS = "timeBetweenEvictionRunsMillis";  
        protected static final String PROP_NUMTESTSPEREVICTIONRUN = "numTestsPerEvictionRun";  
        protected static final String PROP_MINEVICTABLEIDLETIMEMILLIS = "minEvictableIdleTimeMillis";  
        protected static final String PROP_TESTWHILEIDLE = "testWhileIdle";  
        protected static final String PROP_PASSWORD = "password";  
        protected static final String PROP_URL = "url";  
        protected static final String PROP_USERNAME = "username";  
        protected static final String PROP_VALIDATIONQUERY = "validationQuery";  
        protected static final String PROP_VALIDATIONQUERY_TIMEOUT = "validationQueryTimeout";  
        protected static final String PROP_INITCONNECTIONSQLS = "initConnectionSqls";  
        protected static final String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed";  
        protected static final String PROP_REMOVEABANDONED = "removeAbandoned";  
        protected static final String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout";  
        protected static final String PROP_LOGABANDONED = "logAbandoned";  
        protected static final String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements";  
        protected static final String PROP_MAXOPENPREPAREDSTATEMENTS = "maxOpenPreparedStatements";  
        protected static final String PROP_CONNECTIONPROPERTIES = "connectionProperties";  
        protected static final String[] ALL_PROPERTIES = { "defaultAutoCommit",  
                "defaultReadOnly", "defaultTransactionIsolation", "defaultCatalog",  
                "driverClassName", "maxActive", "maxIdle", "minIdle",  
                "initialSize", "maxWait", "testOnBorrow", "testOnReturn",  
                "timeBetweenEvictionRunsMillis", "numTestsPerEvictionRun",  
                "minEvictableIdleTimeMillis", "testWhileIdle", "password", "url",  
                "username", "validationQuery", "validationQueryTimeout",  
                "initConnectionSqls", "accessToUnderlyingConnectionAllowed",  
                "removeAbandoned", "removeAbandonedTimeout", "logAbandoned",  
                "poolPreparedStatements", "maxOpenPreparedStatements",  
                "connectionProperties" };  
      
        public Object getObjectInstance(Object obj, Name name, Context nameCtx,  
                Hashtable environment) throws Exception {  
            if ((obj == null) || (!(obj instanceof Reference))) {  
                return null;  
            }  
            Reference ref = (Reference) obj;  
            if (!"javax.sql.DataSource".equals(ref.getClassName())) {  
                return null;  
            }  
      
            Properties properties = new Properties();  
            for (int i = 0; i < ALL_PROPERTIES.length; i++) {  
                String propertyName = ALL_PROPERTIES[i];  
                RefAddr ra = ref.get(propertyName);  
                if (ra != null) {  
                    String propertyValue = ra.getContent().toString();  
                    properties.setProperty(propertyName, propertyValue);  
                }  
            }  
      
            return createDataSource(properties);  
        }  
      
    //数据库链接,@auther http://www.23tiyan.com
        public static DataSource createDataSource(Properties properties)  
                throws Exception {  
            final BasicDataSource dataSource = new BasicDataSource();  
            String value = null;  
      
            value = properties.getProperty("defaultAutoCommit");  
            if (value != null) {  
                dataSource.setDefaultAutoCommit(Boolean.valueOf(value)  
                        .booleanValue());  
            }  
      
            value = properties.getProperty("defaultReadOnly");  
            if (value != null) {  
                dataSource  
                        .setDefaultReadOnly(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("defaultTransactionIsolation");  
            if (value != null) {  
                int level = -1;  
                if ("NONE".equalsIgnoreCase(value)) {  
                    level = 0;  
                } else if ("READ_COMMITTED".equalsIgnoreCase(value)) {  
                    level = 2;  
                } else if ("READ_UNCOMMITTED".equalsIgnoreCase(value)) {  
                    level = 1;  
                } else if ("REPEATABLE_READ".equalsIgnoreCase(value)) {  
                    level = 4;  
                } else if ("SERIALIZABLE".equalsIgnoreCase(value))  
                    level = 8;  
                else {  
                    try {  
                        level = Integer.parseInt(value);  
                    } catch (NumberFormatException e) {  
                        System.err  
                                .println("Could not parse defaultTransactionIsolation: "  
                                        + value);  
                        System.err  
                                .println("WARNING: defaultTransactionIsolation not set");  
                        System.err  
                                .println("using default value of database driver");  
      
                        level = -1;  
                    }  
                }  
                dataSource.setDefaultTransactionIsolation(level);  
            }  
      
            value = properties.getProperty("defaultCatalog");  
            if (value != null) {  
                dataSource.setDefaultCatalog(value);  
            }  
      
            value = properties.getProperty("driverClassName");  
            if (value != null) {  
                dataSource.setDriverClassName(value);  
            }  
      
            value = properties.getProperty("maxActive");  
            if (value != null) {  
                dataSource.setMaxActive(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("maxIdle");  
            if (value != null) {  
                dataSource.setMaxIdle(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("minIdle");  
            if (value != null) {  
                dataSource.setMinIdle(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("initialSize");  
            if (value != null) {  
                dataSource.setInitialSize(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("maxWait");  
            if (value != null) {  
                dataSource.setMaxWait(Long.parseLong(value));  
            }  
      
            value = properties.getProperty("testOnBorrow");  
            if (value != null) {  
                dataSource.setTestOnBorrow(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("testOnReturn");  
            if (value != null) {  
                dataSource.setTestOnReturn(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("timeBetweenEvictionRunsMillis");  
            if (value != null) {  
                dataSource.setTimeBetweenEvictionRunsMillis(Long.parseLong(value));  
            }  
      
            value = properties.getProperty("numTestsPerEvictionRun");  
            if (value != null) {  
                dataSource.setNumTestsPerEvictionRun(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("minEvictableIdleTimeMillis");  
            if (value != null) {  
                dataSource.setMinEvictableIdleTimeMillis(Long.parseLong(value));  
            }  
      
            value = properties.getProperty("testWhileIdle");  
            if (value != null) {  
                dataSource.setTestWhileIdle(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("password");  
            if (value != null) {  
                dataSource.setPassword(CipherEncrypter.decrypt(value.trim()));  
            }  
      
            value = properties.getProperty("url");  
            if (value != null) {  
                dataSource.setUrl(value);  
            }  
      
            value = properties.getProperty("username");  
            if (value != null) {  
                dataSource.setUsername(value.trim());  
            }  
      
            value = properties.getProperty("validationQuery");  
            if (value != null) {  
                dataSource.setValidationQuery(value);  
            }  
      
            value = properties.getProperty("validationQueryTimeout");  
            if (value != null) {  
                dataSource.setValidationQueryTimeout(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("accessToUnderlyingConnectionAllowed");  
            if (value != null) {  
                dataSource.setAccessToUnderlyingConnectionAllowed(Boolean.valueOf(  
                        value).booleanValue());  
            }  
      
            value = properties.getProperty("removeAbandoned");  
            if (value != null) {  
                dataSource  
                        .setRemoveAbandoned(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("removeAbandonedTimeout");  
            if (value != null) {  
                dataSource.setRemoveAbandonedTimeout(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("logAbandoned");  
            if (value != null) {  
                dataSource.setLogAbandoned(Boolean.valueOf(value).booleanValue());  
            }  
      
            value = properties.getProperty("poolPreparedStatements");  
            if (value != null) {  
                dataSource.setPoolPreparedStatements(Boolean.valueOf(value)  
                        .booleanValue());  
            }  
      
            value = properties.getProperty("maxOpenPreparedStatements");  
            if (value != null) {  
                dataSource.setMaxOpenPreparedStatements(Integer.parseInt(value));  
            }  
      
            value = properties.getProperty("initConnectionSqls");  
            if (value != null) {  
                StringTokenizer tokenizer = new StringTokenizer(value, ";");  
                dataSource.setConnectionInitSqls(Collections.list(tokenizer));  
            }  
      
            value = properties.getProperty("connectionProperties");  
            if (value != null) {  
                Properties p = getProperties(value);  
                Enumeration e = p.propertyNames();  
                while (e.hasMoreElements()) {  
                    String propertyName = (String) e.nextElement();  
                    dataSource.addConnectionProperty(propertyName,  
                            p.getProperty(propertyName));  
                }  
      
            }  
      
            if (dataSource.getInitialSize() > 0) {  
                dataSource.getLogWriter();  
            }  
      
            Runtime.getRuntime().addShutdownHook(new Thread() {  
                public void run() {  
                    try {  
                        dataSource.close();  
                    } catch (SQLException e) {  
                        e.printStackTrace();  
                    }  
                }  
            });  
      
            return dataSource;  
        }  
      
        protected static Properties getProperties(String propText) throws Exception {  
            Properties p = new Properties();  
            if (propText != null) {  
                p.load(new ByteArrayInputStream(propText.replace(';', '\n').getBytes()));  
            }  
            return p;  
        }  
      
    }

    这个时候,我们可以将以上两个类打包(vajra-dbsecure.jar),并指定一个Main入口类,再tomcat全局数据源中使用加密后的数据库密码就可以恢复了。

    <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="50" maxIdle="20" maxOpenPreparedStatements="100" maxWait="10000" name="jdbc/yxzxuserDS" password="L9+rt2kMEHo=" poolPreparedStatements="true" type="javax.sql.DataSource" url="jdbc:mysql://192.168.2.102:3306/testdb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false" username="appuser" validationQuery="SELECT 1" factory="com.vajra.security.datasource.VajraBasicDataSourceFactory"/>  

     如何快速实现Tomcat数据库连接池数据库密码加密的方法也就能够轻易的完成了!

    展开全文
  • 需要修改tomcat下的/common/lib下的commons-dbcp-1.2.1.jar(注意版本号:我这是tomcat 5.5版本)。准备工作:先到apache下载commons-dbcp这个包的源代码。再找个加密类(加密算法我这选DES)开始:修改org.apache.commons....

    需要修改tomcat下的/common/lib下的commons-dbcp-1.2.1.jar(注意版本号:我这是tomcat 5.5版本)。

    准备工作:

    先到apache下载commons-dbcp这个包的源代码。

    再找个加密类(加密算法我这选DES)

    开始:

    修改org.apache.commons.dbcp.BasicDataSourceFactory.java这个类就ok了.

    value = properties.getProperty(PROP_PASSWORD);

    if (value != null) {

    dataSource.setPassword(value);

    }

    修改为

    value = properties.getProperty(PROP_PASSWORD);

    if (value != null) {

    byte [] b = CryptDESede.decode(new sun.misc.BASE64Decoder().decodeBuffer(value), "yysoft36".getBytes());

    dataSource.setPassword(new String(b));

    }

    就好有。

    但运行tomcat还是提示连接数据库密码错误。

    几经周折。发现在项目的web-inf/lib下也有个dbcp包。把这个包去除。连接成功。

    分享到:

    18e900b8666ce6f233d25ec02f95ee59.png

    72dd548719f0ace4d5f9bca64e1d7715.png

    2009-09-14 10:19

    浏览 2584

    评论

    展开全文
  • 使用AES256加密技术实现tomcat7对连接池数据库密码加密解密,资源中包含加密小程序,小程序实现加密,tomcat中实现解密,方便客户自己修改数据库密码且是密文!
  • TOMCAT 连接池数据库密码加密方法

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    原文来自:http://club.youshang.com/173/viewspace-1701,因为我觉得作者讲解不太详细,我把后面给去掉,保留了作者的前半部份。

      Tomcat 连接池写在server.xml里的数据用户以及密码都是明文,这样非常不安全的,如果一但知道了这个数据库名和密码获得,可想而知。 

    那么如何实现对数据库密码加密呢,,因为喜欢开源,接下来就奉献给大家。

        最开始的想法是通过tomcat的源码从catalina.java这个加载类开始找,看连接池是如何加载的,然后修改这个类,重新ant。后来发现了连接池用的factory类,决定重这个类开始下手。

    如果才能把用户名或者是密码使用加密算法进行加密使用呢,这就需要对Tomcat一般依赖dbcp连接池配置。

    http://jakarta.apache.org/commons/dbcp/下载commons-dbcp源码包(一定要对用tomcat的版本),对org.apache.commons.dbcp.BasicDataSourceFactory类修改,根据"PROP_PASSWORD"RA 找到如下:

    value = properties.getProperty(PROP_PASSWORD);

            if (value != null) {

                dataSource.setPassword(value);

            }

    可以看得出来就是将配置文件中取出的密码,进行赋值给相关变量了,这个时候把准备好的加密码文件加进去,如我的加密码JAVA为Encode.java,将这个文件放在这个包下面,但要保证该Encode.java最好不引用除J2SE以外的其它包,否则还得把包给加进去,我这里改成:

    value = properties.getProperty(PROP_PASSWORD);

            if (value != null) {

                dataSource.setPassword(Encode.decode(value));

            }

    就表示对从数据源配置中取过来的密码进行解密了,这个时候可见数据源配置中密码如下:

        <parameter>

          <name>password</name>

          <value>1f65866187612115</value><!--原为123456-->

        </parameter>

    当然这里的密码是采用上面提到的Encode.java的encode进行加密码的,与decode是可逆的,这样才可以正确解密。

    另外说明一下,从官方网站下载下来的源程序,采用ANT并不一定可以直接编译,我这里就是这种情况,编译的时候把错,将其导入ECLIPSE工程中,并加入相关POOL包,通过ANT也编译不过去,我猜想可能是ANT版本的原因,因为后面的我把"工程->自动编译..."给勾上后,自动编译过去,将这两个类BasicDataSourceFactory和Encode拷贝出来,将原来的包用WINRAR打开,放到其路径中。另外这外commons-dbcp-1.2.2.jar放到server/lib下面不行,至少我这边就不行,我的TOMCAT是5.0,我前面一直在这里找这个包都没有找到,但是我看数据源却是采用的BasicDataSourceFactory,后来动用了UE才搜索出来,原来在common的lib下面,将其拷贝进去,重启TOMCAT登陆,OK。

    本文出自:冯立彬的博客



               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 使用AES256加密技术实现tomcat7对连接池数据库密码加密解密,资源中包含加密小程序,小程序实现加密,tomcat中实现解密,方便客户自己修改数据库密码且是密文!支持多操作系统如:linux mac os 文件太多分成两部分请...
  • 如何实现Tomcat连接池数据库密码加密 润乾报表应用在tomcat应用服务器进行部署时,如果需要调用tomcat配置好的数据库连接池,就不得不把报表数据源连接的密码以明文形式暴露,这样数据库连接的用户名密码都非常...
  • tomcat数据库连接池密码加密

    千次阅读 2017-07-09 22:12:13
    应用部署到tomcat上后,数据库连接信息通常配置在context.xml,默认配置都是明文形式,如数据库用户名、密码等,这样可能会导致配置信息被其他人窃取,造成安全隐患,下面介绍下通过对配置信息加解密来保证数据库的...
  • 详细讲解tomcat 连接池数据库解密加密方法以及过程。
  • 需要修改tomcat下的/common/lib下的commons-dbcp-1.2.1.jar(注意版本号:我这是tomcat 5.5版本)。   准备工作: 先到apache下载commons-dbcp这个包的源代码。 再找个加密类(加密算法我这选DES)     开始: ...
  • 最近看了网上一些关于TOMCAT 连接池数据库密码加密方法,感觉写的都不是很详细,自己研究了下,有些心得,写出来和大家共享一下. 首先,先去http://commons.apache.org/dbcp/ 下载commons-dbcp源码包,我下载的版本是...
  • TOMCAT 连接池数据库密码可以加密

    千次阅读 2014-07-28 11:53:09
    TOMCAT 连接池数据库密码可以加密   url: ...    Tomcat 连接池大家应该都用过吧,那写在server.xml里的数据用户以及密码都是明文,这样非常不安全的,...那么如何实现对数据库密码加密呢,,因为喜欢开源,接下
  • Tomcat JNDI配置忽略,网上这方面的文章一大堆。废话少说直接代码。packageorg.apache.tomcat.dbcp;importjavax.naming.RefAddr;importjavax.naming.Reference;importorg.apache.tomcat.dbcp.dbcp....
  • Tomcat配置数据库连接加密访问

    千次阅读 2018-07-26 11:44:32
    1.jar包地址:AES加密访问...3.配置D:\apps\apache-tomcat-7.0.90\conf\server.xml文件,数据库加密访问 4.解压tomcat-encrypt.jar包,对用户名密码进行加密 5.加密运行main方法 6.数据源配置如下, ...
  •  password="加密密码"  .....  />  对于tomcat7+,SecurityDataSourceFacotry,CryptoUtils类不用打jar,放到tomcat HOME lib中。而以前的版本必须放到Tomcat HOME lib中,且JDBC驱动也要放到Tomcat HOME...
  • 出于安全角度,数据库密码不应该明文显示,应该使用密文,在网上找了一圈没找到,没办法只有自己研究,经过一天的研究,找到如下最佳方案,分享给大家 1.数据源创建方式选取 在TOMCAT中配置 Context path="/quiee...
  • 数据库密码不允许明文保存,而Tomcat的连接池配置文件不管是xml格式也好还是properties格式也好都只支持明文的读取,而且系统是陈旧项目,变动代码风险太大,因此决定修改中间件实现数据库密码加密。  通过查找...
  • Apache Tomcat 数据源密码加密(c3p0)

    千次阅读 2012-09-18 09:57:52
    Tomcat作为J2EE应用服务器已经被越来越多的企业客户所采用,但其数据源的配置一般是在其server.xml中,数据库的密码也是以明文方式存储,很多客户基于安全考虑要求对数据库密码进行加密存储,现将近期做的加密方案...
  • ![图片说明](https://img-ask.csdn.net/upload/202004/30/1588238546_338094.png)![图片说明]... 加密数据库用户名和密码本地能跑;打成war包单独用tomcat就报数据库初始化错误;急急急。。。
  • 平常我们配置数据源可能都是明文的配置下数据库用户和密码连上数据库就ok,但是有些用户感觉这明文的密码还是很不爽的,那么我们就需要给密码加密了,进入正题: 我的数据源配置是tomcat 目录下面 conf 文件夹下面的 ...
  • 1.cmd 切换到druid目录 我的是C:\tool\apache-tomcat-7.0.67\webapps\projectA\WEB-INF\lib 2.运行命令  java -cp druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools 密码 确定后会输出密码 3....
  • tomcat jndi加密

    千次阅读 2014-09-16 18:17:44
    平常我们配置数据源可能都是明文的配置下数据库用户和密码连上数据库就ok,但是有些用户感觉这明文的密码还是很不爽的,那么我们就需要给密码加密了,进入正题: 我的数据源配置是tomcat 目录下面 conf 文件夹下面的 ...
  • Tomcat jndi 加密

    2014-03-19 14:36:46
    平常我们配置数据源可能都是明文的配置下数据库用户和密码连上数据库就ok,但是有些用户感觉这明文的密码还是很不爽的,那么我们就需要给密码加密了,进入正题: 我的数据源配置是tomcat 目录下面 conf 文件夹下面的 ...
  • tomcat里面的数据库连接配置是指向: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory 我们进入到该jar包中可以看见,这个里面是获取用户名和密码以及其他参数的: value = properties.getProperty(...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 138
精华内容 55
关键字:

tomcat数据库密码加密