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.引入依赖<commons-io.version>2.8.0</commons-io.version><dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version></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应用程序和服务变得更加容易。