git clone --branch 6.使用加密数据源并配置日志 git@gitee.com:simen_net/springboot-sample.git
配置logback.xml,规范日志输出格式,配置info和error日志输出为文件(保存30天)
在application-dev.yaml中配置数据源
# spring基本配置
spring:
# 数据库连接池配置
datasource:
driver-class-name: org.h2.Driver
# 使用H2数据库,此处不配置url,在com.strong.config.DataSourceConfig中配置本地目录数据库
# url: jdbc:h2:mem:simen
# url: jdbc:h2:./simen
username: BKkV4rITSiMsMBEZtIoNeLivkfJYjRNPJjX0EJ21hxMQ/oflQL5Qk3u8B7RhqfD+KIkOkPHDSNx3c67q78lTwLqTOCuYkltDI2R9kES3d4yXb+bFxtXAm9qs7m+EMLX85MRX
password: BDNZEUz2C0XDhU0y3OtKUCVkoLKVlTo5EXEIhBtKHwAGT5heBYyKkkd0I5J8A1PBRGkczhA86MqI2SQTXXuJ+b+ki4jqhlNhELG+ts6T/VZugd6pKs5bbqcSDWqT5s0XEpbgJ1Ah7aE56AbazjVaBX5U3FsEU/KhWHQ3qx0KoN47
# 连接池类型
type: com.alibaba.druid.pool.DruidDataSource
# 参数配置
druid:
# 初始化时建立物理连接的个数
initialSize: 5
# 最小连接池数量
minIdle: 20
# 最大连接池数量
maxActive: 50
# 获取连接时最大等待时间,单位:毫秒
maxWait: 60000
# 是否缓存PSCache,PSCache对支持游标的数据库性能提升巨大
poolPreparedStatements: true
# 启用PSCache,必须配置大于0
maxPoolPreparedStatementPerConnectionSize: 20
# 用来检测连接是否有效的sql
validationQuery: select 1
# 检测连接是否有效的超时时间,单位:秒
validationQueryTimeout: 5
# 申请连接时执行validationQuery检测连接是否有效,会降低性能
testOnBorrow: false
# 归还连接时执行validationQuery检测连接是否有效,会降低性能
testOnReturn: false
# 申请连接的时候检测连接是否有效
testWhileIdle: true
# 空闲时间超过minEvictableIdleTimeMillis,是否强制keepAlive
keepAlive: false
# 空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最小时间,单位毫秒
minEvictableIdleTimeMillis: 30000
# 物理连接初始化的时候执行的sql。
connectionInitSqls: select 0
# 常用的插件有:监控统计用的filter:stat、日志用的filter:log4j、防御sql注入的filter:wall
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: |-
druid.stat.mergeSql=false;
druid.stat.slowSqlMillis=5000
增加数据库配置DataSourceConfig,对账号密码进行加密,解决项目源码提交到公共git造成账号密码泄露的问题。
/**
* 从默认参数配置数据源
*
* @return {@link DataSource}
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource getDataSource() {
DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
// 如果是H2数据库,则注入加载
if (StrUtil.equals(org.h2.Driver.class.getName(), driverClassName)) {
// 配置数据库URL
String strJdbcUrl = "jdbc:h2:tcp://localhost:9092/" +
StrongUtils.getStaticPath(STR_DIRECTORY_STATICS, databaseName);
druidDataSource.setUrl(strJdbcUrl);
log.info("成功连接H2数据库[{}]", strJdbcUrl);
}
// 使用私钥解密账号密码,注入数据源
druidDataSource.setUsername(SM2_OBJ.decryptStr(username, KeyType.PrivateKey));
druidDataSource.setPassword(SM2_OBJ.decryptStr(password, KeyType.PrivateKey));
return druidDataSource;
}
DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
static
中public static void main(String[] args) {
// 测试加解密、签名字符串
SecurityUtils.testPasswordEncode();
// 生成数据密码加密后字符串
String strDatabaseUsername = "sa";
String strDatabasePassword = "123456";
log.info("\n使用公钥加密数据库账号密码,需将加密字符串配置到application.yaml\n数据库用户名[{}] 加密后[{}]\n密码[{}] 加密后[{}]\n",
strDatabaseUsername, SM2_OBJ.encryptBase64(strDatabaseUsername, KeyType.PublicKey),
strDatabasePassword, SM2_OBJ.encryptBase64(strDatabasePassword, KeyType.PublicKey)
);
// 启动H2服务器
H2Utils.startH2Server();
// 设置当前时区
TimeZone.setDefault(TimeZone.getTimeZone(STR_TIME_ZONE_ASIA_SHANGHAI));
// 获取系统对象
SpringApplication application = new SpringApplication(SpringbootSampleApplication.class);
// 系统pid记录文件
String strPidFile = StrongUtils.getStaticPath(STR_FILE_APP_PID);
// 将pid监听信息写入记录文件,使用 cat /xxxx/app.id | xargs kill 停止服务
application.addListeners(new ApplicationPidFileWriter(strPidFile));
log.info("将pid监听信息写入记录文件{}", strPidFile);
// 启动系统
application.run();
}
博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。 其中博主还将尝试统一异常处理、自定义加密认证、代码自动生成等功能
博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】KEY初始化功能和全局错误处理
博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】使用bcprov-jdk18on的sm2加密算法对用户密码进行签名及认证