Uniapp上传文件至AWS S3与jasypt加密数据库用户名密码

1. Uniapp上传文件至AWS S3

1.1 创建demo项目

HBuilderX新建uniapp项目,选择默认模板

在mainfest.json中配置上传超时时间

{
	"networkTimeout": {
		"request": 30000,
		"downloadFile": 30000,
		"uploadFile": 30000,
		"connectSocket": 30000
    }
}

在index.html中添加如下代码:

<script>
  if (global === undefined) {
    // 解决global未定义问题
    var global = window;
  }
</script>

1.2 实现代码

安装依赖npm install aws-sdk
在index.vue中编写如下代码:

<template>
	<view>
		<button size="mini" @click="chooseFile">选择文件</button>
		<button size="mini" @click="uploadFile">上传文件</button>
		<text v-if="selectedFile">{{ selectedFile.name }}</text>
		<text v-if="uploadProgress">进度:{{ uploadProgress }}</text> 
	</view>
</template>

<script>
	import AWS from 'aws-sdk'
	export default {
		data() {
			return {
			  uploadProgress: 0,
			  selectedFile: null
			}
		},
		onLoad() {

		},
		methods: {
			 chooseFile() {
				 const self = this
				 uni.chooseFile({
				   count: 1, //默认100
				   type: 'all',
				   success: function (res) {
					    self.selectedFile = res.tempFiles[0] // 将选择的文件保存到 selectedFile 变量中
					    self.newFileName = self.selectedFile.name
				   }
				 });
			},
			uploadFile() {
			  if (!this.selectedFile) {
				return;
			  }
		
			  const s3 = new AWS.S3({
				accessKeyId: '需要修改',
				secretAccessKey: '需要修改',
				region: '需要修改'
			  });
		
			  const params = {
				Bucket: '需要修改',
				Key: this.selectedFile.name,
				Body: this.selectedFile
			  };
		
			  const options = {
				partSize: 10 * 1024 * 1024,
				queueSize: 1
			  };
		
			  const upload = s3.upload(params, options);
		
			  upload.on('httpUploadProgress', (e) => {
				if (e.total) {
				  this.uploadProgress = Math.round((e.loaded / e.total) * 100);
				}
			  });
		
			  upload.promise();
		
			  this.uploadProgress = 100;
			}
		}
	}
</script>

<style>
</style>

1.3 AWS S3相关配置

代码中我们看到有四处需要修改:
我们登录后,点击安全凭据

在这里插入图片描述

然后我们创建访问秘钥,下载为csv保存,即可获得accessKeyId与secretAccessKey

在这里插入图片描述

我们找到存储桶,进行创建并记下所在区域,如us-east-2,至此4个参数都齐了

最后一步,我们需要在存储桶的权限中进行跨域设置

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

在这里插入图片描述

好啦,基于UNI-APP上传文件至AWS S3就完成了

2. jasypt加密数据库用户名密码

生产环境数据库密码上传到github上不安全,故考虑加密方式处理,本文基于最新的3.0.3版本介绍

2.1 引入maven依赖

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>3.0.3</version>
</dependency>

<plugin>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-maven-plugin</artifactId>
</plugin>

2.2 配置application.yml

jasypt:
  encryptor:
    password: shenjian #盐值

2.3 采用插件命令获得加密值

mvn jasypt:encrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="root"

加密后结果,从下图可以看出3.0.3默认使用PBEWITHHMACSHA512ANDAES_256加密算法

对当前结果解密

mvn jasypt:decrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM"

解密后结果

既然能够解密,呢么盐值的存取是比较重要的,稍后讲解

2.4 配置加密后的数据库

spring:
  # Mysql数据源
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/photo?serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: ENC(CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM)
    password: ENC(R5BPqaEh0oa+fgAqthW0eFTMuooFHEjOglQ8o38gvEFTiCtORllppbF+932zh5Zc)
    driver-class-name: com.mysql.cj.jdbc.Driver

因为项目基于springboot,只要在启动类有@SpringBootApplication注解就可以了

2.5 启动参数中添加盐值

刚才看到可以解密加密后的值,呢么在配置文件中就不能存在盐值配置,删除application.yml中的盐值配置,可以采用启动参数配置或者从环境变量中获取方式,如下

方式1: 在idea启动时添加参数

--jasypt.encryptor.password=shenjian

方式2: springboot启动时添加参数

java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=shenjian

方式3:从linux环境变量中获取盐值

# 进入环境变量设置文件
vim /etc/profile 
# 在最后一行添加变量
export JASYPT_PASSWORD=shenjian
# 启动项目
java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=${JASYPT_PASSWORD}

2.6 常见问题

1)Caused by: java.lang.SecurityException: Cannot locate policy or framework files!

分析:由于3.0.3中使用的算法可能在java8的安全策略中没有,需要手动下载jce_policy-8并将里面的jar包放在如${JAVA_HOME}/jre/lib/security中,如下图所示:


欢迎关注公众号算法小生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法小生Đ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值