加密视频验证
This commit is contained in:
5
pom.xml
5
pom.xml
@@ -293,6 +293,11 @@
|
|||||||
<artifactId>springfox-swagger2</artifactId>
|
<artifactId>springfox-swagger2</artifactId>
|
||||||
<version>${swagger.version}</version>
|
<version>${swagger.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>vod20170321</artifactId>
|
||||||
|
<version>2.20.0</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.springfox</groupId>
|
<groupId>io.springfox</groupId>
|
||||||
<artifactId>springfox-swagger-ui</artifactId>
|
<artifactId>springfox-swagger-ui</artifactId>
|
||||||
|
|||||||
45
src/main/java/com/peanut/common/utils/SpdbUtil.java
Normal file
45
src/main/java/com/peanut/common/utils/SpdbUtil.java
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package com.peanut.common.utils;
|
||||||
|
|
||||||
|
import com.aliyun.tea.TeaException;
|
||||||
|
import com.aliyun.teautil.models.RuntimeOptions;
|
||||||
|
import com.aliyun.vod20170321.Client;
|
||||||
|
import com.aliyun.vod20170321.models.GetVideoPlayAuthRequest;
|
||||||
|
import com.aliyun.vod20170321.models.GetVideoPlayAuthResponse;
|
||||||
|
|
||||||
|
public class SpdbUtil {
|
||||||
|
|
||||||
|
public static String getPlayAuth(String vid) throws Exception {
|
||||||
|
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
|
||||||
|
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
||||||
|
.setAccessKeyId("LTAI5tMKmWhPfnPsz2J3bfxL")
|
||||||
|
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
||||||
|
.setAccessKeySecret("doFUplbiIxL6PgJME3eSaW8G6HauuC");
|
||||||
|
// Endpoint 请参考 https://api.aliyun.com/product/vod
|
||||||
|
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
|
||||||
|
Client client = new Client(config);
|
||||||
|
GetVideoPlayAuthRequest getVideoPlayAuthRequest = new GetVideoPlayAuthRequest().setVideoId(vid).setAuthInfoTimeout(1000L);;
|
||||||
|
RuntimeOptions runtimeOptions = new RuntimeOptions();
|
||||||
|
try {
|
||||||
|
// 复制代码运行请自行打印 API 的返回值
|
||||||
|
GetVideoPlayAuthResponse videoPlayAuthWithOptions = client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtimeOptions);
|
||||||
|
return videoPlayAuthWithOptions.getBody().getPlayAuth();
|
||||||
|
} catch (TeaException error) {
|
||||||
|
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||||
|
// 错误 message
|
||||||
|
System.out.println(error.getMessage());
|
||||||
|
// 诊断地址
|
||||||
|
System.out.println(error.getData().get("Recommend"));
|
||||||
|
return "error";
|
||||||
|
|
||||||
|
} catch (Exception _error) {
|
||||||
|
TeaException error = new TeaException(_error.getMessage(), _error);
|
||||||
|
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||||
|
// 错误 message
|
||||||
|
System.out.println(error.getMessage());
|
||||||
|
// 诊断地址
|
||||||
|
System.out.println(error.getData().get("Recommend"));
|
||||||
|
return "error";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.peanut.modules.common.entity;
|
package com.peanut.modules.common.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
@@ -26,4 +27,7 @@ public class CourseCatalogueChapterVideoEntity {
|
|||||||
|
|
||||||
@TableLogic
|
@TableLogic
|
||||||
private Integer delFlag;
|
private Integer delFlag;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String playAuth;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,4 +7,6 @@ import com.peanut.modules.common.to.ParamTo;
|
|||||||
|
|
||||||
public interface CourseCatalogueChapterVideoService extends IService<CourseCatalogueChapterVideoEntity> {
|
public interface CourseCatalogueChapterVideoService extends IService<CourseCatalogueChapterVideoEntity> {
|
||||||
Page getCourseCatalogueChapterVideoList(ParamTo param);
|
Page getCourseCatalogueChapterVideoList(ParamTo param);
|
||||||
|
|
||||||
|
CourseCatalogueChapterVideoEntity checkVideo(CourseCatalogueChapterVideoEntity video) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,17 +3,35 @@ package com.peanut.modules.master.service.impl;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.peanut.common.utils.ShiroUtils;
|
||||||
|
import com.peanut.common.utils.SpdbUtil;
|
||||||
|
import com.peanut.modules.common.dao.CourseCatalogueChapterDao;
|
||||||
import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao;
|
import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao;
|
||||||
|
import com.peanut.modules.common.dao.CourseCatalogueDao;
|
||||||
|
import com.peanut.modules.common.dao.UserToCourseDao;
|
||||||
|
import com.peanut.modules.common.entity.CourseCatalogueChapterEntity;
|
||||||
import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity;
|
import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity;
|
||||||
|
import com.peanut.modules.common.entity.CourseCatalogueEntity;
|
||||||
|
import com.peanut.modules.common.entity.UserToCourseEntity;
|
||||||
import com.peanut.modules.common.to.ParamTo;
|
import com.peanut.modules.common.to.ParamTo;
|
||||||
import com.peanut.modules.master.service.CourseCatalogueChapterVideoService;
|
import com.peanut.modules.master.service.CourseCatalogueChapterVideoService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.xml.ws.soap.Addressing;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service("masterCourseCatalogueChapterVideoService")
|
@Service("masterCourseCatalogueChapterVideoService")
|
||||||
public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl<CourseCatalogueChapterVideoDao, CourseCatalogueChapterVideoEntity> implements CourseCatalogueChapterVideoService {
|
public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl<CourseCatalogueChapterVideoDao, CourseCatalogueChapterVideoEntity> implements CourseCatalogueChapterVideoService {
|
||||||
|
@Autowired
|
||||||
|
private CourseCatalogueChapterDao courseCatalogueChapterDao;
|
||||||
|
@Autowired
|
||||||
|
private CourseCatalogueDao courseCatalogueDao;
|
||||||
|
@Autowired
|
||||||
|
private UserToCourseDao userToCourseDao;
|
||||||
@Override
|
@Override
|
||||||
public Page getCourseCatalogueChapterVideoList(ParamTo param) {
|
public Page getCourseCatalogueChapterVideoList(ParamTo param) {
|
||||||
LambdaQueryWrapper<CourseCatalogueChapterVideoEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<CourseCatalogueChapterVideoEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
@@ -22,4 +40,32 @@ public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl<CourseCa
|
|||||||
Page<CourseCatalogueChapterVideoEntity> page = this.page(new Page<>(param.getPage(), param.getLimit()), wrapper);
|
Page<CourseCatalogueChapterVideoEntity> page = this.page(new Page<>(param.getPage(), param.getLimit()), wrapper);
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CourseCatalogueChapterVideoEntity checkVideo(CourseCatalogueChapterVideoEntity video) throws Exception {
|
||||||
|
CourseCatalogueChapterEntity courseCatalogueChapterEntity = courseCatalogueChapterDao.selectById(video.getChapterId());
|
||||||
|
CourseCatalogueEntity courseCatalogueEntity = courseCatalogueDao.selectById(courseCatalogueChapterEntity.getCatalogueId());
|
||||||
|
Integer uId = ShiroUtils.getUId();
|
||||||
|
List<UserToCourseEntity> userToCourseEntities = userToCourseDao.selectList(new LambdaQueryWrapper<UserToCourseEntity>().eq(UserToCourseEntity::getUserId, uId).eq(UserToCourseEntity::getCourseId, courseCatalogueEntity.getCourseId()));
|
||||||
|
//用户课程足迹
|
||||||
|
if(userToCourseEntities.size()!=0){
|
||||||
|
UserToCourseEntity userToCourseEntity = userToCourseEntities.get(0);
|
||||||
|
userToCourseEntity.setUpdateTime(new Date());
|
||||||
|
userToCourseDao.updateById(userToCourseEntity);
|
||||||
|
}else{
|
||||||
|
UserToCourseEntity userToCourseEntity = new UserToCourseEntity();
|
||||||
|
userToCourseEntity.setUserId(uId);
|
||||||
|
userToCourseEntity.setCourseId(courseCatalogueEntity.getCourseId());
|
||||||
|
userToCourseEntity.setCreateTime(new Date());
|
||||||
|
userToCourseEntity.setUpdateTime(new Date());
|
||||||
|
userToCourseDao.insert(userToCourseEntity);
|
||||||
|
}
|
||||||
|
//加密视频组装playauth
|
||||||
|
if(video.getType()==1){
|
||||||
|
String playAuth = SpdbUtil.getPlayAuth(video.getVideo());
|
||||||
|
video.setPlayAuth(playAuth);
|
||||||
|
}
|
||||||
|
return video;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
package com.peanut.modules.sociology.controller;
|
package com.peanut.modules.sociology.controller;
|
||||||
|
|
||||||
|
import com.aliyun.tea.TeaException;
|
||||||
|
import com.aliyun.teautil.models.RuntimeOptions;
|
||||||
|
import com.aliyun.vod20170321.Client;
|
||||||
|
import com.aliyun.vod20170321.models.*;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.peanut.common.utils.R;
|
import com.peanut.common.utils.R;
|
||||||
import com.peanut.common.utils.ShiroUtils;
|
import com.peanut.common.utils.ShiroUtils;
|
||||||
|
import com.peanut.common.utils.SpdbUtil;
|
||||||
|
import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao;
|
||||||
import com.peanut.modules.common.entity.CourseCatalogueChapterEntity;
|
import com.peanut.modules.common.entity.CourseCatalogueChapterEntity;
|
||||||
|
import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity;
|
||||||
import com.peanut.modules.common.entity.CourseEntity;
|
import com.peanut.modules.common.entity.CourseEntity;
|
||||||
import com.peanut.modules.common.to.ParamTo;
|
import com.peanut.modules.common.to.ParamTo;
|
||||||
|
import com.peanut.modules.master.service.CourseCatalogueChapterVideoService;
|
||||||
import com.peanut.modules.sociology.service.CourseCatalogueChapterService;
|
import com.peanut.modules.sociology.service.CourseCatalogueChapterService;
|
||||||
import com.peanut.modules.sociology.service.CourseService;
|
import com.peanut.modules.sociology.service.CourseService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -26,6 +34,8 @@ public class CourseController {
|
|||||||
private CourseService courseService;
|
private CourseService courseService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private CourseCatalogueChapterService courseCatalogueChapterService;
|
private CourseCatalogueChapterService courseCatalogueChapterService;
|
||||||
|
@Autowired
|
||||||
|
private CourseCatalogueChapterVideoService courseCatalogueChapterVideoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户最近学习课程列表
|
* 获取用户最近学习课程列表
|
||||||
@@ -95,4 +105,22 @@ public class CourseController {
|
|||||||
return R.ok().put("chapterList",courseCatalogueChapterList);
|
return R.ok().put("chapterList",courseCatalogueChapterList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping("/getPlayAuth")
|
||||||
|
public R getPlayAuth(@RequestBody Map<String,String> map) throws Exception {
|
||||||
|
String playAuth = SpdbUtil.getPlayAuth(map.get("vid"));
|
||||||
|
return R.ok().put("playAuth",playAuth);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证video权限,并解决足迹,加密视频签名问题
|
||||||
|
* @param video
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@RequestMapping("/checkVideo")
|
||||||
|
public R checkVideo(@RequestBody CourseCatalogueChapterVideoEntity video) throws Exception {
|
||||||
|
CourseCatalogueChapterVideoEntity courseCatalogueChapterVideoEntity = courseCatalogueChapterVideoService.checkVideo(video);
|
||||||
|
return R.ok().put("video",courseCatalogueChapterVideoEntity);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user