本文介绍远程监考服务端集成示例源码说明。
项目框架
基于主流的Java8 + Springboot2搭建框架。
基于Mybatis plus作为Repository层选型。
基于SpringSecurity + JWT实现权限控制。
项目部署
前提条件
创建数据库
当配置好DB后,手工创建数据库表。以MySQL为例,建表语句为:
CREATE TABLE `cheat_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`exam_id` varchar(256) NOT NULL COMMENT '考试ID',
`data` text NOT NULL COMMENT '具体配置,JSON串',
`creator` varchar(256) DEFAULT NULL COMMENT '创建者',
`created_at` datetime NOT NULL COMMENT '创建时间',
`updated_at` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `exam_id` (`exam_id`),
KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;
CREATE TABLE `cheat_record` (
`id` bigint NOT NULL AUTO_INCREMENT,
`exam_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考试ID',
`room_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考场id',
`user_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '考生id',
`detect_type` varchar(256) NOT NULL COMMENT '检测类型',
`detect_time` datetime NOT NULL COMMENT '检测时间',
`is_main_monitor` varchar(256) NOT NULL COMMENT '考生主机位/副机位',
`extra_info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '额外信息存储',
`created_at` datetime NOT NULL COMMENT '创建时间',
`updated_at` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_exam_id` (`exam_id`),
KEY `idx_create_at` (`created_at`),
KEY `idx_room_id` (`room_id`) USING BTREE
) ENGINE=InnoDB;
CREATE TABLE `exam_room_infos` (
`id` varchar(256) NOT NULL,
`name` varchar(256) DEFAULT NULL,
`exam_id` varchar(256) DEFAULT NULL,
`status` bigint DEFAULT NULL,
`audio_status` bigint DEFAULT NULL,
`im_group_id` varchar(256) DEFAULT NULL,
`create_teacher` varchar(256) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;
CREATE TABLE `examinations` (
`id` varchar(256) NOT NULL,
`name` varchar(256) DEFAULT NULL,
`start_time` datetime DEFAULT NULL,
`end_time` datetime DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB
参数说明
cheat_config表: 存储作弊配置
cheat_record表:记录考生的作弊信息
exam_room_infos表:存储考场信息
examinations表:存储考试信息
具体字段
具体字段可参考代码对应的各个实体:
com.aliyuncs.aui.entity.CheatConfigEntity
com.aliyuncs.aui.entity.CheatRecordEntity
com.aliyuncs.aui.entity.RoomInfoEntity
com.aliyuncs.aui.entity.ExamEntity
部署方式
方式一(推荐):通过源码部署。
本示例主要通过源码构建并部署AppServer。根据源码的说明文档配置并执行,详细信息,请参见AUI Kits远程监考AppServer。
方式二:如果熟悉函数计算,也可以使用Serverless平台快速部署,参见快速创建函数。
在首次部署服务器时,请务必编辑代码文件code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java
,给属性SECRET随机设置一个字符串。
项目参数配置
下载远程监考源码至服务器。
打开源码
Server\Java\code\src\main\resources
目录下的application.yml
文件,配置相关参数。参数配置信息
说明
# pop配置。需要配置账号的AccessKey ID和AccessKey Secret,用于调用IM及live相关服务 biz: openapi: access: key: "*********" secret: "*********"
调用阿里云IM及Live相关服务API时,您需要使用AccessKey完成身份验证。AccessKey包括AccessKey ID和AccessKey Secret。具体如下:
AccessKey ID:用于标识用户。
AccessKey Secret:用于验证用户的密钥。AccessKey Secret必须保密。
更多信息,请参见创建AccessKey。
# 新IM相关配置 new_im: appId: "********" appKey: "********" appSign: "********"
直播动消息应用ID,请参见控制台开通与配置中的创建直播互动消息应用获取。
# 配置推拉流信息 live_stream: push_url: push.*****.vip pull_url: pull.*****.vip push_auth_key: zJl4****** pull_auth_key: mDZs******** app_name: live auth_expires: 604800
# ram及upload用于考生端本地录制功能上传视频的功能,需要使用就配置 ram: access_key_id: LTAI5********* access_key_secret: NLgHO******** upload: role_arn: acs:ram::******* region: cn-shanghai bucket: ***** base_path: /***
请参阅使用STS临时访问凭证访问OSS或使用STS临时授权方案上传视频文档创建RAM用户、角色,配置相关参数。
access_key_id:RAM用户ID。
access_key_secret:RAM用户访问密钥。
role_arn:RAM角色。
region:Bucket所在区域,如 oss-cn-shanghai。
bucket:OSS Bucket名。
base_path:上传至OSS Bucket的基础路径,如 /record/local/ ,注意和考生客户端配置项保持一致。
# 配置允许跨域的请求域名 http: cors: host: "*"
Web端使用该服务时请正确设置CORS,以允许跨域请求。
项目打包和运行
打包
使用IDEA自带的Maven打包,jar在target目录下。
在
Server\Java\code
路径下使用以下命令执行打包操作。mvn package -DskipTests
将
target
目录下的jar包发送到服务器。scp xxx.jar root@ip:/root
运行项目
在jar包所在目录下打开终端。
终端运行,日志打印到终端。
java -jar ***.jar
后台运行,将日志打印输出到nohup.out文件。
nohup java -jar ***.jar &
查看是否启动成功。
访问对应接口,显示如下,说明AppServer启动成功。