commons-io commons-io ${commons-io.version}

2. 写RSAUtil工具类, 包括3个方法

  • generateKeyToFile
  • decryptRSA
  • encryptRSA
import java.io.File;
import java.nio.charset.Charset;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
public class RSAUtil {
	static Logger logger = LoggerFactory.getLogger(RSAUtil.class);
	private static String algorithm = "RSA"; // 加密算法
	 * 生成密钥对并保存在本地文件中
	 * @param algorithm : 算法
	 * @param pubPath   : 公钥保存路径
	 * @param priPath   : 私钥保存路径
	 * @throws Exception
	public static void generateKeyToFile(String algorithm, String pubPath, String priPath) {
		try {
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
			KeyPair keyPair = keyPairGenerator.generateKeyPair();
			PublicKey publicKey = keyPair.getPublic();
			PrivateKey privateKey = keyPair.getPrivate();
			byte[] publicKeyEncoded = publicKey.getEncoded();
			byte[] privateKeyEncoded = privateKey.getEncoded();
			String publicKeyString = Base64.getEncoder().encodeToString(publicKeyEncoded);
			String privateKeyString = Base64.getEncoder().encodeToString(privateKeyEncoded);
			// 保存公私钥到文件
			FileUtils.writeStringToFile(new File(pubPath), publicKeyString, Charset.forName("UTF-8"));
			FileUtils.writeStringToFile(new File(priPath), privateKeyString, Charset.forName("UTF-8"));
		} catch (Exception e) {
			logger.warn(e.getMessage(), e);
	 * @param privateKey
	 * @param encrypted  : 密文
	 * @return : 明文
	 * @throws Exception
	public static String decryptRSA(String privateKey, String encrypted) {
		try {
			if (!StringUtils.hasText(encrypted)) {
				return "";
			KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
			PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
			// 生成私钥
			PrivateKey key = keyFactory.generatePrivate(spec);
			// 加密
			Cipher cipher = Cipher.getInstance(algorithm);
			cipher.init(Cipher.DECRYPT_MODE, key);
			byte[] decode = Base64.getDecoder().decode(encrypted);
			byte[] bytes1 = cipher.doFinal(decode);
			return new String(bytes1);
		} catch (Exception e) {
			logger.warn(e.getMessage(), e);
			return "";
	 * @param publicKey
	 * @param input     : 明文
	 * @return :密文
	 * @throws Exception
	public static String encryptRSA(String publicKey, String input) throws Exception {
		try {
			if (!StringUtils.hasText(input)) {
				return "";
			KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
			X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
			PublicKey key = keyFactory.generatePublic(spec);
			// 加密
			Cipher cipher = Cipher.getInstance(algorithm);
			cipher.init(Cipher.ENCRYPT_MODE, key);
			byte[] bytes = cipher.doFinal(input.getBytes());
			return Base64.getEncoder().encodeToString(bytes);
		} catch (Exception e) {
			logger.warn(e.getMessage(), e);
			return "";

3. 生成private key, public key,加密url, username, password

  • 调用 RSAUtil.generateKeyToFile() 方法生成private key, public key
  • 调用 RSAUtil.encryptRSA() 把配置文件中的明文url, username, password加密

4.把pulic key, private key 和 加密后的url, username, password 写入配置文件

spring.datasource.url=encrypturl
spring.datasource.username=encryptusername
spring.datasource.password=encryptpassword
# RSA public key, private key
encrypt.private-key=        
encrypt.public-key=

5.配置类

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DataSourceConfig {
	@Value("${encrypt.private-key}")
	private String privateKey;
	@Value("${spring.datasource.url}")
	String jdbcUrl;
	@Value("${spring.datasource.username}")
	String username;
	@Value("${spring.datasource.password}")
	String password;
	@Bean
	public DataSource getDataSource() throws Exception {
		DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
		dataSourceBuilder.url(RSAUtil.decryptRSA(privateKey, jdbcUrl));
		dataSourceBuilder.username(RSAUtil.decryptRSA(privateKey, username));
		dataSourceBuilder.password(RSAUtil.decryptRSA(privateKey, password));
		return dataSourceBuilder.build();
                    1.引入依赖&lt;commons-io.version&gt;2.8.0&lt;/commons-io.version&gt;&lt;dependency&gt;    &lt;groupId&gt;commons-io&lt;/groupId&gt;    &lt;artifactId&gt;commons-io&lt;/artifactId&gt;    &lt;version&gt;${commons-io.version}&lt;/version&gt;&lt;/dependen
				
一个基于SpringBoot + MyBatis + Thymeleaf 的后台通用权限管理系统(完美注释描述),代码简洁易懂、界面美观大方,内部封装了权限管理系统常用的功能,可直接作为快速开发JavaWeb项目的脚手架使用。 新建数据库并导入sql文件夹下的数据库脚本到MySQL 如果你不需要使用jasypt加密数据库用户名密码,则直接修改application-dev.yml中MySQL数据库连接信息即可(ENC部分也替换掉) 如需加密数据库用户名密码,请使用工具类com.bluewind.boot.common.utils.JasyptUtils进行加密后再配置连接信息(替换掉ENC包裹的部分), 然后在application-dev.yml的jasypt.encryptor.password配置处替换为你的私人密钥。 j 修改配置文件中application-dev.yml中Redis的连接信息 运行启动类BluewindBootApplication,即可正常启动项
SpringBoot(七)SpringBoot整合Druid实现数据库密码加密 SpringBoot(七)SpringBoot整合Druid实现数据库密码加密 SpringBoot(七)SpringBoot整合Druid实现数据库密码加密
基于SpringBoot+Vue开发的电影售票及影院管理系统源码(前后端分离)+数据库+项目说明(毕设项目).zip 基于SpringBoot + Vue 的电影售票及影院管理系统(前后端分离) 后端:Spring Boot + Mybatis 【实现功能】 售票子系统:用户浏览电影信息,电影分类查看,搜索查看,购票操作(未实现支付沙箱),超时取消订单等 管理子系统:管理员管理影院信息,电影信息,用户角色,角色权限,查看订单信息等功能 安全校验:使用shiro安全框架进行用户请求过滤,密码加密 数据库连接池:druid 分页插件:pageHelper 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、数据库、项目说明等,该项目可以直接作为毕设、课程设计使用。 也可以用来学习参考借鉴!
基于SpringBoot+Vue的电影售票及影院管理系统源码+sql数据库(高分毕设).zip 【资源说明】 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 后端:Spring Boot + Mybatis 实现功能: 售票子系统:用户浏览电影信息,电影分类查看,搜索查看,购票操作(未实现支付沙箱),超时取消订单等 管理子系统:管理员管理影院信息,电影信息,用户角色,角色权限,查看订单信息等功能 安全校验:使用shiro安全框架进行用户请求过滤,密码加密 数据库连接池:druid 分页插件:pageHelper vue安装对应的版本: nodejs 14.xx npm 6.xx vue 2.x C:\Users\dell>node -v v14.17.6 C:\Users\dell>npm -v 6.14.15 C:\Use
Bootstrap、Spring Boot、MyBatis、Shiro都是在开发中常用的框架和工具。 Bootstrap是一个流行的前端开发框架,它提供了许多UI组件和样式,简化了Web页面的开发过程,使页面看起来更加美观和易于使用。 Spring Boot是一个基于Spring框架的开发框架,它可以快速创建可执行的Spring应用程序。它省去了许多复杂的配置,使开发人员可以更快地构建应用程序。 MyBatis是一个流行的Java持久化框架,它提供了简单的方法来连接数据库并执行SQL查询。它允许开发人员使用注解或XML定义映射,将Java对象映射到数据库存储。 Shiro是一个强大且易于使用的Java安全框架,它提供了身份验证、授权和加密等功能,可以保护应用程序免受各种Web安全威胁。 这些框架和工具可以大大简化Java开发人员的工作流程,提高开发效率和代码质量。同时,它们也使得构建高质量、高性能的Web应用程序和服务变得更加容易。