Skip to content

ambi-vip/jetty-servlet-Aes-Rsa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jetty-servlet-Aes-Rsa

jetty-servlet-Aes-Rsa

作者:

赵帅

开发文档

branch说明:master是serve端代码。client是client端代码,jpaclient是二者整合的代码(需要配置环境,不建议使用)。 client端启动后(端口为8181)。访问:http://localhost:8181/swagger-ui.html#/ 查看api接口。

下面内容全部完成

Server 端功能需求:

  1. 上传文件接口:

响应标准http协议的post 请求发送来的文件,接收到文件后加密存储,将 文件重命名(使用UUID)并按照日期保存至服务器文件系统的不同的目录 中(目录格式yyyyMMdd),同时将文件大小、文件类型,原始文件名、创 建时间、文件保存目录地址、文件加密数字信封等元数据记录至数据库中, 同时将UUID 返回给客户端。 文件加密方法:先使用对称加密算法(AES)对文件进行加密,对称秘钥随机生 成,每次均不相同,然后使用非对称加密算法(RSA)对前面的随机对称秘钥加密 (Server 端持有公钥),加密后的结果(数字信封)保存至数据库中。

  1. 下载文件接口:

响应客户端获取文件流的get 请求,客户端参数为接口1 中返回的UUID, 在响应中写入文件流,无其他返回值。

  1. 获取文件元数据接口:

响应客户端get 请求,客户端参数为接口1 中返回的UUID,返回值为Json 格式的元数据信息。

  1. 接口权限校验:

以上所有接口在调用前服务端均需要校验客户端权限,校验规则为RSA 签 名校验,Server 端持有公钥,客户端持有私钥,客户端向服务端发送请求 时,需要在Header 中添加X-SID 和X-Signature 两个属性,SID 为客户端随机 生成的字符串,Signature 为客户端使用私钥对SID 签名后的签名数据,服务 端获取Header 中的SID 和Signature 参数后,用公钥对SID 和Signature 验 签,来验证是否是合法的客户端请求,不合法的请求返回403 状态码。

  1. 扩展:

文件查询接口,最近上传的10 个文件的元数据Json 数组。

Server 端技术要求: 项目基于Maven 构建,WEB 服务使用嵌入式Jetty 实现,相关接口使用原生 Sevlet 或Filter 实现,不得使用SpringFramework 或其他第三方MVC 框架,数据 访问使用原生JDBC 实现,不得使用第三方数据库访问框架,数据库使用Derby 嵌入式数据库,随服务一起启动,除Jetty、Logger、Derby 和Junit 外,引入其他第三方依赖。Server 端持有公钥在接口1 和4 中是同一个秘钥。

Client 端功能需求: 1. Client 端Web 服务: 使用SpringMVC(其他MVC 框架不限)框架实现简单的web 应用,可以响 应前端页面请求,接收前端上传的文件,接收到的文件需要调用Server 端 的文件上传接口,将文件上传至文件服务器,然后调用服务端的的元数据接 口获取文件详细信息返回给前端,响应前端的下载接口,从Server 端下载 文件,解密后返回给前端。

文件解密方法:使用 Client 端持有的私钥,通过非对称加密算法(RSA)对数字信 封(保存在元数据中)解密,解密出的结果即为该文件的对称加密秘钥,然后使用 这个对称秘钥对文件用 AES 算法解密即可获取原始文件。

  1. 前端页面: 使用视图层技术(JSP、JSTL、模板、HTML、JavaScript 等具体技术不限)实 现一个简单页面,页面上提供选择文件、上传、展示上传后的文件信息(元 数据)、下载上传后的文件几个功能。

  2. 接口权限校验:Client 端持有私钥需要满足Server 端的接口校验要求;

  3. 列表展示,调用Server 端的查询接口,最近上传的文件列表;

Client 端技术要求: 项目基于SpringBoot构建,WEB 服务使用的第三方框架和依赖不限,使用Layui技术。

About

jetty-servlet-Aes-Rsa

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages