Spring Boot 實戰:輕松搞定電子簽名與合同系統集成!
在數字化辦公日益普及的今天,企業對于文件的電子簽名與合同管理提出了更高的要求。無論是法律合規性還是業務流程的高效運作,電子簽章的引入都能極大提升辦公效率。電子簽名不僅能夠確保文檔的真實性、完整性和不可否認性,同時還具備防篡改和防偽造的特性,極大增強了合同簽署的安全性。
在本篇文章中,我們基于 Spring Boot 3.4 框架,結合 MyBatis-Plus、Vue & Element,搭建一個完整的電子簽名和合同管理系統。系統支持 在線簽署、文件存儲、電子印章管理,并符合《中華人民共和國電子簽名法》及國際通用 RSA 加密算法。
接下來,我們將從系統架構、代碼實現及業務流程等方面詳細解析該系統的技術實現。
系統架構
本系統主要由以下幾個部分組成:
- 前端基于 Vue & Element UI 構建,提供用戶友好的電子簽章交互界面。
- 后端采用 Spring Boot 3.4 作為核心框架,結合 MyBatis-Plus 進行數據持久化。
- 文件存儲支持本地文件系統,也可擴展至 MinIO、阿里云 OSS、FastDFS。
- 安全機制使用 RSA 數字簽名算法,確保電子簽章的合法性和防篡改性。
代碼實現
控制層(Controller)
package com.icoderoad.controller;
import com.icoderoad.service.DocService;
import com.icoderoad.utils.FileSaver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.net.URLDecoder;
@Controller
@RequestMapping("/mobile")
public class MobileOfficeController {
@Value("${docpath}")
private String docPath;
@Value("${moblicpath}")
private String moblicPath;
@Autowired
private DocService docService;
@RequestMapping("/opendoc")
public void openDocument(HttpServletRequest request, HttpServletResponse response, HttpSession session, String type, String userName) throws Exception {
userName = URLDecoder.decode(userName, "utf-8");
String fileName = ("word".equals(type)) ? docService.getDocById(1).getDocName() : docService.getDocById(1).getPdfName();
FileSaver fileSaver = new FileSaver(request, response);
fileSaver.webOpen("file://" + docPath + fileName, userName);
}
}
業務層(Service)
package com.icoderoad.service.impl;
import com.icoderoad.mapper.DocMapper;
import com.icoderoad.model.Doc;
import com.icoderoad.service.DocService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DocServiceImpl implements DocService {
@Autowired
private DocMapper docMapper;
@Override
public Doc getDocById(int id) {
return docMapper.getDocById(id);
}
}
文件處理工具類(FileSaver)
package com.icoderoad.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class FileSaver {
public static boolean copyFile(String sourcePath, String targetPath) throws Exception {
File sourceFile = new File(sourcePath);
if (!sourceFile.exists()) {
return false;
}
try (InputStream inStream = new FileInputStream(sourceFile);
FileOutputStream outStream = new FileOutputStream(targetPath)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
}
return true;
}
}
電子簽名生成(QRCodeUtil)
package com.icoderoad.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
public class QRCodeUtil {
public static BufferedImage generateQRCode(String content) throws WriterException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400, hints);
return toBufferedImage(bitMatrix);
}
}
結論
在本篇文章中,我們深入探討了基于 Spring Boot 3.4 實現 電子簽名與合同系統集成 的完整解決方案。通過結合 Spring Boot、MyBatis-Plus、Vue & Element,我們成功構建了一個支持 在線文檔簽署、合同審批、電子印章管理 的系統。
這一系統的引入,不僅簡化了企業合同簽署流程,還極大提升了數據安全性和防篡改能力。未來,可以進一步擴展 區塊鏈存證、AI OCR 自動識別簽名 等功能,讓電子簽章更加智能化。