Java网站视频资源加密

news/2024/5/8 14:26:45/文章来源:https://blog.csdn.net/qq_19391957/article/details/111189908

----------------------------------------------------------分享此文章,只为让版权能够得到更多的保护----------------------------------------------------------------------------

目前公司是做线上视频教育的,教育视频资源一直被盗取,版权被侵犯。领导特别重视此事,于是就开始探索如何加密。

果然,功夫不负有心人。。。。

为了遵守技术开源无私奉献的原则,让版权能够得到更多的保护,决定果断分享此功能的实现方法!

先带大家看一下主流视频网站的实现:

等等吧,就不过多展示了,目测很多网站都用这种加密方式,其中的src链接都是blob:http://xxx格式的,且根据链接无法获取视频源。因为这并不是一个在线的视频存放地址,这样你通过爬虫脚本也无法下载该视频文件

那么具体如何实现的呢?

不急,咱们一步一步来:

第一步:java 服务器接口,根据url 返回资源

package com.wf.course.web.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;@Controller
public class VideoController {@ResponseBody@RequestMapping("/getVideoSrc")public OutputStream getVideoSrc(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){//1.创建文件对象File f = new File("D:/test/x.mp4");//2.获取文件名称String fileName = f.getName();//3.导出文件String agent = httpServletRequest.getHeader("User-Agent").toUpperCase();InputStream fis = null;OutputStream os = null;try {//4.获取输入流fis = new BufferedInputStream(new FileInputStream(f.getPath()));byte[] buffer;buffer = new byte[fis.available()];fis.read(buffer);httpServletResponse.reset();//5.由于火狐和其他浏览器显示名称的方式不相同,需要进行不同的编码处理if(agent.indexOf("FIREFOX") != -1){//火狐浏览器httpServletResponse.addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));}else{//其他浏览器httpServletResponse.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));}//6.设置response编码httpServletResponse.setCharacterEncoding("UTF-8");httpServletResponse.addHeader("Content-Length", "" + f.length());//设置输出文件类型httpServletResponse.setContentType("video/mpeg4");//7.获取response输出流os = httpServletResponse.getOutputStream();os.flush();//8.输出文件os.write(buffer);}catch(Exception e){System.out.println(e.getMessage());} finally{//关闭流try {if(fis != null){ fis.close(); }if(os != null){ os.flush(); }if(os != null){os.close(); }} catch (IOException e) {System.out.println(e.getMessage());}}return os;}@RequestMapping("/getVideoBlob_V2")public OutputStream getVideoBlob_V2(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {String httpUrl = "https://wangfang.oss-cn-qingdao.aliyuncs.com/wf_video/videoPath/863E1B126B81B7B60993CC0B9B1EC1EA.mp3";// 1.下载网络文件URL url = null;try {url = new URL(httpUrl);} catch (MalformedURLException e1) {e1.printStackTrace();}InputStream inStream = null;OutputStream outputStream = null;try {//2.获取链接URLConnection conn = url.openConnection();//3.输入流inStream = conn.getInputStream();httpServletResponse.reset();httpServletResponse.addHeader("Content-Disposition", "attachment;filename=" + httpUrl);//6.设置response编码httpServletResponse.setCharacterEncoding("UTF-8");//设置输出文件类型httpServletResponse.setContentType("video/mpeg4");//7.获取response输出流outputStream = httpServletResponse.getOutputStream();int byteRead;while ((byteRead = inStream.read()) != -1) {outputStream.write(byteRead);}} catch (IOException e) {e.printStackTrace();System.out.println(e);} finally {try {inStream.close();outputStream.close();} catch (IOException e) {e.printStackTrace();}}return outputStream;}
}

第二步:页面添加<video>标签引用

<video controls="controls"  preload="auto"  height="300" width="400" id="videoPath"    type="video/mp4">您的浏览器不支持html5!</video>

第三步:页面js处理,调用接口,加载资源

$(function () {var xhr = new XMLHttpRequest();//创建XMLHttpRequest对象xhr.open('GET', 'http://localhost:8080/getVideoBlob_V2', true);//配置请求方式、请求地址以及是否同步xhr.responseType = 'blob';//设置结果类型为blob;xhr.onload = function(e) {alert(this.status);if (this.status === 200) {// 获取blob对象var blob = this.response;console.log(blob);// 获取blob对象地址,并把值赋给容器$("#videoPath").attr("src", URL.createObjectURL(blob));}};xhr.send();});
  • 这里使用的最原生的XMLHttpRequest对象语法,这里最重要的一点是要设置responseType为blob,这样接收到response直接就是一个blob对象供我们使用。这个responseType属性不属于http头部信息,而是ajax请求中XHR对象的属性(默认为""也就是text类型,而在一些封装XHR的框架中,一般把默认值设为json)。这样就可以得到以blob:开头的临时url地址,而且在向服务端请求时页隐藏了真实的视频地址。
createObjectURL与BLOB
  • 我们再回到那个以blob:开头的神秘字符串,它其实是通过URL.createObjectURL这个API生成的,该函数接收一个BLOB对象,返回该对象对应的DOMString,这个字符串其实也可以看做是一个url地址,但它是与当前窗口的document对象绑定的,也可以说是会话(session)级的,所以你在新的tab打开也就无效了
  • 再来了解下BLOB,他的全称为big binary large object,二进制大对象。如果把一个视频文件转换成二进制对象,其大小肯定很大,这样理解就清楚多了。在浏览器端也提供了BLOB相关的API,通过new Blog(...)生成blog对象。
  • 拿到blog对象后,再通过URL.createObjectURL生成临时地址,赋值给video标签的src属性,这样就可以了。但其实可以直接从服务端接收二进制对象,就是服务端把视频文件转换成二进制对象,通过接口给到前端,前端再生成dom string

参考文章及感谢其作者:通过BLOB加密视频文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_899461.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站怎么做才能够真正的留住用户?

当今已是互联网的时代&#xff0c;各种网站层出不穷&#xff0c;各种网站优化的方式也千变万化&#xff0c;每个站长都希望自己能吸引的用户能越来越多&#xff0c;关注度能越来越高&#xff0c;能将越来越多的用户留在自己的网站&#xff0c;最好能将自己的网站变成一个“黑洞…

做网站如何怎么做到吸引用户和留住用户的运营思路

一直做产品&#xff0c;从未做运营&#xff0c;但这并不妨碍我谈谈对运营的理解。因为在互联网领域&#xff0c;产品和运营都是相通的&#xff0c;产品是要给用户提供价值&#xff0c;运营是让用户认识这种价值&#xff0c;它们相互依存&#xff0c;战略目标是一致的。任何运营…

前端程序猿常用网站总结

第一PPT 优品PPT 油猴 PPT超级市场 极简简历 简信 书签地球 https://www.bookmarkearth.com/ 小图标 fontasome 精灵图在线编译 https://css.spritegen.com/ 在线转ico图标 https://www.bitbug.net/ 阿里图标库 蓝湖 摩客 解压缩文件 7.zip 站长素材 字体免费、 …

介绍几个练习机试的网站

竟然好久没有没有写博客了&#xff0c;最近为了考研复试在练习机试&#xff0c;九度OJ关闭了好可惜&#xff0c;但是我还找到几个比较不错的网址&#xff0c;放上来供参考一下。 牛客网 链接到的是考研专题&#xff08;感觉对考研复试比较有针对性所以放最前面了&#xff0c;…

看SEO老鸟如何用一篇文章教会你写作

相信对于很多站长来说&#xff0c;建站发外链&#xff0c;搞点事件营销不在话下&#xff0c;甚至可以说信手拈来&#xff0c;但是一提到写文章。我估计很多站长都会立即没了精神头&#xff0c;倒不是说写文章很难&#xff0c;但是对于大部分技术宅的我们来说写文章的确是一件痛…

网站性能提升之采用FreeMarker实现网页静态化

摘要 众所周知&#xff0c;随着网站的访问量增加&#xff0c;如何给用户以良好的访问体验就显得尤为重要。提升网站性能便成为一些网站面临的一大难题&#xff0c;像hao123这样的导航网站要提升网站的性能只要部署的web服务器数量足够就可以承载超大规模的访问量&#xff0c;如…

RHCE-Day18(2)-LNMP搭建网站

RHCE-Day18(2)-LNMP搭建网站 使用LNMP架构部署动态网站环 1.源码包程序 使用源码包来安装服务程序具有两个优势。 源码包的可移植性非常好&#xff0c;几乎可以在任何Linux系统中安装使用&#xff0c;而RPM软件包是针对特定系统和架构编写的指令集&#xff0c;必须严格地符合…

网站站长必备的六款网页负载、网速性能测试工具

转自&#xff1a;http://www.cnplugins.com/zhuanti/sixwebmastertestplugins.html 有大数据表明&#xff0c;一个网页打开的速度超过4秒&#xff0c;用户就会关掉页面&#xff0c;对于网站来说就是流失到一个潜在的客户。有什么一些开发者插件可以帮助我们站在来及时的检测自己…

大型网站技术架构

作者&#xff1a;xlzd 链接&#xff1a;https://www.zhihu.com/question/20657269/answer/101795180 来源&#xff1a;知乎 著作权归作者所有&#xff0c;转载请联系作者获得授权。 1. 初始阶段的网站架构 一般来讲&#xff0c;大型网站都是从小型网站发展而来&#xff0c;一开…

Java开发牛人十大必备网站

本文由 ImportNew - 张文太 翻译自 programcreek。如需转载本文&#xff0c;请先参见文章末尾处的转载要求。 ImportNew注&#xff1a;如果你也对Java技术翻译分享感兴趣&#xff0c;欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。 以下是我收集的Java开发牛人必备…

Java开发牛人十大必备网站

本文由 ImportNew - 张文太 翻译自 programcreek。如需转载本文&#xff0c;请先参见文章末尾处的转载要求。 ImportNew注&#xff1a;如果你也对Java技术翻译分享感兴趣&#xff0c;欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。 以下是我收集的Java开发牛人必…

Python Django windows 环境配置---(网站开发)

学习做网站纯属个人的兴趣&#xff0c;就选择了Python对网站的开发。 下载Python 可以在Python官方网站下载下载完成以后就可以进行环境配置。环境配置路径就不做详细介绍了&#xff0c;可以在网上搜索出来。安装Django 在配置完Python以后就可以在Django官网下载程序包了&a…

java网上商城 购物网站 在线商品销售系统设计与实现 项目源代码下载 javaweb jsp ssm ssh mysql

1 前端商城界面 1.1 商城首页 首页分为三个部分&#xff0c;分别显示热销推荐、特价促销、新品上架三个推荐类目的商品列表 以上这三类推荐商品可以分别在后台管理中设置 点击商品图片或商品标题可以进入商品详情页面 点击【加入购物车】按钮会将次商品加入购物车 1.2 商品…

java农场商城 生鲜超市 水果蔬菜电商网站平台系统设计与实现 项目源代码下载 javaweb jsp ssm mysql

1 前端商城界面 1.1 商城首页 首页导航上有五个按钮&#xff0c;分别显示产品分类、商城首页、今日推荐、热销排行、新品上市&#xff0c;五个推荐类目的商品列表 首页很长说明书中1和2页均是首页&#xff0c;分六个部分&#xff0c;分别是今日推荐、热销排行、生态果蔬、肉禽…

java服装商城 男装女装童装鞋帽超市 购物网站系统设计与实现 项目源代码下载 javaweb jsp ssm mysql

1 前端商城界面 1.1 商城首页 首页分为三个部分&#xff0c;分别显示女装、男装、童装三个推荐类目的商品列表&#xff0c;以上这三类推荐商品可以分别在后台管理中设置&#xff0c;点击商品图片或商品标题可以进入商品详情页面 1.2 搜索功能 鼠标进入导航条上方的红色文本框…

dedecms 实现两个网站调用一个数据库

近年来移动端的流量上升&#xff0c;让我们不得不把眼光放在移动端上&#xff0c;程序猿都知道dedecms的wap不中用&#xff0c;标签少的可怜&#xff0c;没有静态化的功能&#xff0c;想调点数据&#xff0c;自己写sql语句&#xff0c;这东东如果用。于是&#xff0c;半路出家的…

搭建一个大型网站架构的实验环境(Squid缓存服务器篇)

squid缓存服务器的配置 squid缓存服务器在这个实验环境中有两台&#xff08;192.168.10.30&#xff0c;192.168.10.31&#xff09;做成squid集群&#xff0c;我们首先安装一台&#xff0c;然后复制一台&#xff0c;再做配置&#xff0c;这样省事&#xff0c;哈&#xff01; squ…

12个顶级开发者社区网站帮助程序员走上人生巅峰

公元二十一世纪&#xff0c;世界迎来了大互联网时代&#xff0c;程序员这个行当已然成为了医生、律师等高端中产阶级职业之外的又一高薪职业。不过既然是技术职业&#xff0c;自然也 就会分三六九等&#xff0c;没理想的程序员只能写着自己擅长的代码&#xff0c;加着没玩没了的…

[转载]说说大型高并发高负载网站的系统架构

| 评论 # yueguoliang发表于2007-09-29 16:08:37IP: 211.94.149.* ju ti dian shuo ming fang an cai hao # fxbird发表于2007-09-29 16:19:19IP: 59.44.72.* 这才是高质量的文章。 # oldmoon发表于2007-09-29 17:36:43IP: 116.252.70.* 受益匪浅 # irplay发表于2007-09-30 09:…

互联网网站的反爬虫策略浅析(收藏)

关键字: crawler 因为搜索引擎的流行&#xff0c;网络爬虫已经成了很普及网络技术&#xff0c;除了专门做搜索的Google&#xff0c;Yahoo&#xff0c;微软&#xff0c;百度以外&#xff0c;几乎每个大型门户网站都有自己的搜索引擎&#xff0c;大大小小叫得出来名字得就几十种&…