Search in sources :

Example 1 with DesensitizeProvider

use of org.sagacity.sqltoy.plugins.secure.DesensitizeProvider in project sagacity-sqltoy by chenrenfei.

the class SqltoyAutoConfiguration method sqlToyContext.

// 构建sqltoy上下文,并指定初始化方法和销毁方法
@Bean(name = "sqlToyContext", initMethod = "initialize", destroyMethod = "destroy")
@ConditionalOnMissingBean
SqlToyContext sqlToyContext() throws Exception {
    // 用辅助配置来校验是否配置错误
    if (StringUtil.isBlank(properties.getSqlResourcesDir()) && StringUtil.isNotBlank(sqlResourcesDir)) {
        throw new IllegalArgumentException("请检查sqltoy配置,是spring.sqltoy作为前缀,而不是sqltoy!\n正确范例: spring.sqltoy.sqlResourcesDir=classpath:com/sagframe/modules");
    }
    SqlToyContext sqlToyContext = new SqlToyContext();
    // 当发现有重复sqlId时是否抛出异常,终止程序执行
    sqlToyContext.setBreakWhenSqlRepeat(properties.isBreakWhenSqlRepeat());
    // sql 文件资源路径
    sqlToyContext.setSqlResourcesDir(properties.getSqlResourcesDir());
    if (properties.getSqlResources() != null && properties.getSqlResources().length > 0) {
        List<String> resList = new ArrayList<String>();
        for (String prop : properties.getSqlResources()) {
            resList.add(prop);
        }
        sqlToyContext.setSqlResources(resList);
    }
    // sql文件解析的编码格式,默认utf-8
    if (properties.getEncoding() != null) {
        sqlToyContext.setEncoding(properties.getEncoding());
    }
    // pojo 扫描路径,意义不存在
    if (properties.getPackagesToScan() != null) {
        sqlToyContext.setPackagesToScan(properties.getPackagesToScan());
    }
    // 特定pojo类加载,意义已经不存在
    if (properties.getAnnotatedClasses() != null) {
        sqlToyContext.setAnnotatedClasses(properties.getAnnotatedClasses());
    }
    // 批量操作时(saveAll、updateAll),每批次数量,默认200
    if (properties.getBatchSize() != null) {
        sqlToyContext.setBatchSize(properties.getBatchSize());
    }
    // 默认数据库fetchSize
    if (properties.getFetchSize() > 0) {
        sqlToyContext.setFetchSize(properties.getFetchSize());
    }
    // 分页查询单页最大记录数量(默认50000)
    if (properties.getPageFetchSizeLimit() != null) {
        sqlToyContext.setPageFetchSizeLimit(properties.getPageFetchSizeLimit());
    }
    // sql 检测间隔时长(单位秒)
    if (properties.getScriptCheckIntervalSeconds() != null) {
        sqlToyContext.setScriptCheckIntervalSeconds(properties.getScriptCheckIntervalSeconds());
    }
    // 缓存、sql文件在初始化后延时多少秒开始检测
    if (properties.getDelayCheckSeconds() != null) {
        sqlToyContext.setDelayCheckSeconds(properties.getDelayCheckSeconds());
    }
    // 是否debug模式
    if (properties.getDebug() != null) {
        sqlToyContext.setDebug(properties.getDebug());
    }
    // sql执行超过多长时间则打印提醒(默认30秒)
    if (properties.getPrintSqlTimeoutMillis() != null) {
        sqlToyContext.setPrintSqlTimeoutMillis(properties.getPrintSqlTimeoutMillis());
    }
    // sql函数转换器
    if (properties.getFunctionConverts() != null) {
        sqlToyContext.setFunctionConverts(properties.getFunctionConverts());
    }
    // 缓存翻译配置
    if (properties.getTranslateConfig() != null) {
        sqlToyContext.setTranslateConfig(properties.getTranslateConfig());
    }
    // 数据库保留字
    if (properties.getReservedWords() != null) {
        sqlToyContext.setReservedWords(properties.getReservedWords());
    }
    // 分页页号超出总页时转第一页,否则返回空集合
    sqlToyContext.setPageOverToFirst(properties.isPageOverToFirst());
    // 数据库方言
    sqlToyContext.setDialect(properties.getDialect());
    // sqltoy内置参数默认值修改
    sqlToyContext.setDialectConfig(properties.getDialectConfig());
    // update 2021-01-18 设置缓存类别,默认ehcache
    sqlToyContext.setCacheType(properties.getCacheType());
    sqlToyContext.setSecurePrivateKey(properties.getSecurePrivateKey());
    sqlToyContext.setSecurePublicKey(properties.getSecurePublicKey());
    // 设置公共统一属性的处理器
    String unfiyHandler = properties.getUnifyFieldsHandler();
    if (StringUtil.isNotBlank(unfiyHandler)) {
        try {
            IUnifyFieldsHandler handler = null;
            // 类
            if (unfiyHandler.contains(".")) {
                handler = (IUnifyFieldsHandler) Class.forName(unfiyHandler).getDeclaredConstructor().newInstance();
            } else // spring bean名称
            if (applicationContext.containsBean(unfiyHandler)) {
                handler = (IUnifyFieldsHandler) applicationContext.getBean(unfiyHandler);
                if (handler == null) {
                    throw new ClassNotFoundException("项目中未定义unifyFieldsHandler=" + unfiyHandler + " 对应的bean!");
                }
            }
            if (handler != null) {
                sqlToyContext.setUnifyFieldsHandler(handler);
            }
        } catch (ClassNotFoundException cne) {
            err.println("------------------- 错误提示 ------------------------------------------- ");
            err.println("spring.sqltoy.unifyFieldsHandler=" + unfiyHandler + " 对应类不存在,错误原因:");
            err.println("--1.您可能直接copy了参照项目的配置文件,但没有将具体的类也同步copy过来!");
            err.println("--2.如您并不需要此功能,请将配置文件中注释掉spring.sqltoy.unifyFieldsHandler");
            err.println("------------------------------------------------");
            cne.printStackTrace();
            throw cne;
        }
    }
    // 设置elastic连接
    Elastic es = properties.getElastic();
    if (es != null && es.getEndpoints() != null && !es.getEndpoints().isEmpty()) {
        sqlToyContext.setDefaultElastic(es.getDefaultId());
        List<ElasticEndpoint> endpoints = new ArrayList<ElasticEndpoint>();
        for (ElasticConfig esconfig : es.getEndpoints()) {
            ElasticEndpoint ep = new ElasticEndpoint(esconfig.getUrl(), esconfig.getSqlPath());
            ep.setId(esconfig.getId());
            if (esconfig.getCharset() != null) {
                ep.setCharset(esconfig.getCharset());
            }
            if (esconfig.getRequestTimeout() != null) {
                ep.setRequestTimeout(esconfig.getRequestTimeout());
            }
            if (esconfig.getConnectTimeout() != null) {
                ep.setConnectTimeout(esconfig.getConnectTimeout());
            }
            if (esconfig.getSocketTimeout() != null) {
                ep.setSocketTimeout(esconfig.getSocketTimeout());
            }
            ep.setAuthCaching(esconfig.isAuthCaching());
            ep.setUsername(esconfig.getUsername());
            ep.setPassword(esconfig.getPassword());
            ep.setKeyStore(esconfig.getKeyStore());
            ep.setKeyStorePass(esconfig.getKeyStorePass());
            ep.setKeyStoreSelfSign(esconfig.isKeyStoreSelfSign());
            ep.setKeyStoreType(esconfig.getKeyStoreType());
            endpoints.add(ep);
        }
        // 这里已经完成了当没有设置默认节点时将第一个节点作为默认节点
        sqlToyContext.setElasticEndpoints(endpoints);
    }
    // 设置默认数据库
    if (properties.getDefaultDataSource() != null) {
        sqlToyContext.setDefaultDataSourceName(properties.getDefaultDataSource());
    }
    // 自定义缓存实现管理器
    String translateCacheManager = properties.getTranslateCacheManager();
    if (StringUtil.isNotBlank(translateCacheManager)) {
        // 缓存管理器的bean名称
        if (applicationContext.containsBean(translateCacheManager)) {
            sqlToyContext.setTranslateCacheManager((TranslateCacheManager) applicationContext.getBean(translateCacheManager));
        } else // 包名和类名称
        if (translateCacheManager.contains(".")) {
            sqlToyContext.setTranslateCacheManager((TranslateCacheManager) Class.forName(translateCacheManager).getDeclaredConstructor().newInstance());
        }
    }
    // 自定义typeHandler
    String typeHandler = properties.getTypeHandler();
    if (StringUtil.isNotBlank(typeHandler)) {
        if (applicationContext.containsBean(typeHandler)) {
            sqlToyContext.setTypeHandler((TypeHandler) applicationContext.getBean(typeHandler));
        } else // 包名和类名称
        if (typeHandler.contains(".")) {
            sqlToyContext.setTypeHandler((TypeHandler) Class.forName(typeHandler).getDeclaredConstructor().newInstance());
        }
    }
    // 自定义数据源选择器
    String dataSourceSelector = properties.getDataSourceSelector();
    if (StringUtil.isNotBlank(dataSourceSelector)) {
        if (applicationContext.containsBean(dataSourceSelector)) {
            sqlToyContext.setDataSourceSelector((DataSourceSelector) applicationContext.getBean(dataSourceSelector));
        } else // 包名和类名称
        if (dataSourceSelector.contains(".")) {
            sqlToyContext.setDataSourceSelector((DataSourceSelector) Class.forName(dataSourceSelector).getDeclaredConstructor().newInstance());
        }
    }
    // 自定义数据库连接获取和释放的接口实现
    String connectionFactory = properties.getConnectionFactory();
    if (StringUtil.isNotBlank(connectionFactory)) {
        if (applicationContext.containsBean(connectionFactory)) {
            sqlToyContext.setConnectionFactory((ConnectionFactory) applicationContext.getBean(connectionFactory));
        } else // 包名和类名称
        if (connectionFactory.contains(".")) {
            sqlToyContext.setConnectionFactory((ConnectionFactory) Class.forName(connectionFactory).getDeclaredConstructor().newInstance());
        }
    }
    // 自定义字段安全实现器
    String fieldsSecureProvider = properties.getFieldsSecureProvider();
    if (StringUtil.isNotBlank(fieldsSecureProvider)) {
        if (applicationContext.containsBean(fieldsSecureProvider)) {
            sqlToyContext.setFieldsSecureProvider((FieldsSecureProvider) applicationContext.getBean(fieldsSecureProvider));
        } else // 包名和类名称
        if (fieldsSecureProvider.contains(".")) {
            sqlToyContext.setFieldsSecureProvider((FieldsSecureProvider) Class.forName(fieldsSecureProvider).getDeclaredConstructor().newInstance());
        }
    }
    // 自定义字段脱敏处理器
    String desensitizeProvider = properties.getDesensitizeProvider();
    if (StringUtil.isNotBlank(desensitizeProvider)) {
        if (applicationContext.containsBean(desensitizeProvider)) {
            sqlToyContext.setDesensitizeProvider((DesensitizeProvider) applicationContext.getBean(desensitizeProvider));
        } else // 包名和类名称
        if (desensitizeProvider.contains(".")) {
            sqlToyContext.setDesensitizeProvider((DesensitizeProvider) Class.forName(desensitizeProvider).getDeclaredConstructor().newInstance());
        }
    }
    return sqlToyContext;
}
Also used : DataSourceSelector(org.sagacity.sqltoy.plugins.datasource.DataSourceSelector) TranslateCacheManager(org.sagacity.sqltoy.translate.cache.TranslateCacheManager) ArrayList(java.util.ArrayList) ElasticEndpoint(org.sagacity.sqltoy.config.model.ElasticEndpoint) FieldsSecureProvider(org.sagacity.sqltoy.plugins.secure.FieldsSecureProvider) IUnifyFieldsHandler(org.sagacity.sqltoy.plugins.IUnifyFieldsHandler) ConnectionFactory(org.sagacity.sqltoy.plugins.datasource.ConnectionFactory) SqlToyContext(org.sagacity.sqltoy.SqlToyContext) TypeHandler(org.sagacity.sqltoy.plugins.TypeHandler) DesensitizeProvider(org.sagacity.sqltoy.plugins.secure.DesensitizeProvider) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) Bean(org.springframework.context.annotation.Bean)

Aggregations

ArrayList (java.util.ArrayList)1 SqlToyContext (org.sagacity.sqltoy.SqlToyContext)1 ElasticEndpoint (org.sagacity.sqltoy.config.model.ElasticEndpoint)1 IUnifyFieldsHandler (org.sagacity.sqltoy.plugins.IUnifyFieldsHandler)1 TypeHandler (org.sagacity.sqltoy.plugins.TypeHandler)1 ConnectionFactory (org.sagacity.sqltoy.plugins.datasource.ConnectionFactory)1 DataSourceSelector (org.sagacity.sqltoy.plugins.datasource.DataSourceSelector)1 DesensitizeProvider (org.sagacity.sqltoy.plugins.secure.DesensitizeProvider)1 FieldsSecureProvider (org.sagacity.sqltoy.plugins.secure.FieldsSecureProvider)1 TranslateCacheManager (org.sagacity.sqltoy.translate.cache.TranslateCacheManager)1 ConditionalOnMissingBean (org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean)1 Bean (org.springframework.context.annotation.Bean)1