zoukankan      html  css  js  c++  java
  • 【Quartz】解密properties配置文件中的账号密码

      在配置quartz时,为了保密某些信息(特别是账号密码),通常会使用密文。那么在实际使用这些配置信息时,需要进行解密。本文提供一种解密方法如下:

    (1)假设在properties文件中加密了账号密码

     1 #============================================================================
     2 # 基础配置
     3 #============================================================================
     4 org.quartz.scheduler.instanceName = JobScheduler
     5 org.quartz.scheduler.instanceId = AUTO
     6 org.quartz.scheduler.rmi.export = false
     7 org.quartz.scheduler.rmi.proxy = false
     8 org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
     9 
    10 #============================================================================
    11 # 调度器线程池配置
    12 #============================================================================
    13 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    14 org.quartz.threadPool.threadCount = 20
    15 org.quartz.threadPool.threadPriority = 5
    16 org.quartz.jobStore.misfireThreshold = 60000
    17 
    18 #============================================================================
    19 # Configure JobStore 作业存储配置
    20 #============================================================================
    21 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
    22 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
    23 org.quartz.jobStore.useProperties = true
    24 org.quartz.jobStore.tablePrefix = QRTZ_
    25 org.quartz.jobStore.dataSource = qzDS
    26 
    27 org.quartz.jobStore.isClustered = true
    28 org.quartz.jobStore.clusterCheckinInterval = 15000
    29 
    30 #============================================================================
    31 # JDBC
    32 #============================================================================
    33 org.quartz.dataSource.qzDS.driver = com.mysql.jdbc.Driver
    34 org.quartz.dataSource.qzDS.URL = jdbc:mysql://localhost:3306/job_scheduler
    35 org.quartz.dataSource.qzDS.user = *****************************
    36 org.quartz.dataSource.qzDS.password = *****************************
    37 org.quartz.dataSource.qzDS.maxConnections = 5
    38 org.quartz.dataSource.qzDS.validationQuery = select 0 from dual
    quartz_config.properties

      注意:properties文件名不能是quartz.properties,否则Quartz可能还是会使用解密前的配置信息。

    (2)写SchedulerConfig.java文件解密账号密码后使用

    import org.quartz.Scheduler;
    import org.quartz.ee.servlet.QuartzInitializerListener;
    import org.springframework.beans.factory.config.PropertiesFactoryBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    import org.wcc.crypt.Crypter;
    import org.wcc.crypt.CrypterFactory;
    
    import java.io.IOException;
    import java.util.Properties;
    
    @Configuration //类似xml中的<beans>标签,一般和@bean注解一起使用来配置一个Bean,让Spring来管理它的生命周期
    public class SchedulerConfig {
    
        @Bean(name="SchedulerFactory")
        public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
            SchedulerFactoryBean factory = new SchedulerFactoryBean();
            factory.setQuartzProperties(quartzProperties());
            return factory;
        }
    
        /**
         * 加载Quartz配置
         *
         */
        @Bean
        public Properties quartzProperties() throws IOException {
            //使用Spring的PropertiesFactoryBean对属性配置文件进行管理
            PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
            propertiesFactoryBean.setLocation(new ClassPathResource("/quartz_config.properties"));
            propertiesFactoryBean.afterPropertiesSet();
    
            Properties properties = propertiesFactoryBean.getObject();
    
            // 账号密码解密
            Crypter crypter = CrypterFactory.getCrypter(CrypterFactory.AES_CBC);
            String user = properties.getProperty("org.quartz.dataSource.qzDS.user");
            if (user != null) {
                user = crypter.decrypt(user);
                properties.setProperty("org.quartz.dataSource.qzDS.user", user);
            }
            String password = properties.getProperty("org.quartz.dataSource.qzDS.password");
            if (password != null) {
                password = crypter.decrypt(password);
                properties.setProperty("org.quartz.dataSource.qzDS.password", password);
            }
    
            return properties;
        }
    
        /**
         * 初始化Quartz监听器,让Spring boot启动时初始化Quartz
         *
         */
        @Bean
        public QuartzInitializerListener executorListener() {
            return new QuartzInitializerListener();
        }
    
        /**
         * 通过SchedulerFactoryBean获取Scheduler的实例
         */
        @Bean(name="Scheduler")
        public Scheduler scheduler() throws IOException {
            return schedulerFactoryBean().getScheduler();
        }
    }
  • 相关阅读:
    C#的编码规范中文版(www.idesign.net Author: Juval Lowy)
    [经典推荐]事半功倍系列之javascript(二)
    [推荐]让SQL跑得更快
    SortedList 用法
    在C#中应用哈希表(Hashtable)
    SVN配置安装
    sql事务处理回滚及保留点transaction,ROLLBACK
    启用Service Broker
    BLOB
    WebServiceBinding属性
  • 原文地址:https://www.cnblogs.com/xiongxx/p/9018314.html
Copyright © 2011-2022 走看看