Java网站视频资源加密

news/2024/5/21 8:14:20/文章来源:https://blog.csdn.net/weixin_30362083/article/details/99084974

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

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

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

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

 

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

 

等等吧,就不过多展示了,目测很多网站都用这种加密方式,其中的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加密视频文件

 

转载于:https://www.cnblogs.com/hero123/p/10856762.html

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

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

相关文章

对Web开发人员有用的8个网站

导读&#xff1a;本文是由比利时的Web开发人员Jean-Baptiste Jung分享的&#xff0c;Jung还在《Web开发/设计人员应当知道的15个网站》这篇文章中推荐了15个相关网站。 1. Min.us: 上传图片的最简单方 任何开发人员、设计师、网络管理员都必须跟客户和同事在线分享图片。Min.us…

网站收集

1.http://msdn.itellyou.cn/ MSDN很多工具可以下载 将地址拷贝到迅雷下载即可 2.https://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65 isual Studio示例代码浏览器 免费Visual Studio示例代码浏览器为开发人员提供了一个在Visual Studio 20…

网站出现慢、卡段问题查找。

希望能帮到大家。大家如果有兴趣可以来我的网站看看:http://www.jiegelo.com

使用nginx+tomcat实现不停机升级网站

还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了&#xff0c;这个时候突然想起来今天晚上是服务器更新的日子&#xff0c;你要在凌晨时分去把最新的代码更新到服务器&#xff0c;以保证明天大家一觉醒来打开网站&#xff0c;发现昨天的 Bug 都不见了。这时候你瞬间没有了…

在CentOS上使用Nginx和Tomcat搭建高可用高并发网站

目录 目录前言创建CentOS虚拟机安装Nginx安装Tomcat安装lvs和keepalived反向代理部署网站搭建数据库编写网站项目解决session一致性注意参考资料前言 本篇文章将介绍如何搭建使用Nginx和Tomcat的高可用高并发的网站&#xff0c;我们将会在CentOS系统上搭建这样一个网站后端。这…

大话设计模式-享元模式的实践-网站模板享元

UML 用户类 用于网站的客户账号 是网站类的外部状态 /*** ClassName: User* Author: Leo* Description: 用户类 用于网站的客户账号 是网站类的外部状态* Date: 2019/5/28 9:58*/ public class User {private String name;public User(String name) {this.name name;}public …

只有登陆注册页需要https加密吗?N网站有必要全站加密吗?

很多人都觉得&#xff0c;HTTPS 可以保护用户的密码等登陆信息&#xff0c;那么其他时候就不需要了。但火狐Firefox浏览器插件Firesheep&#xff0c;证明了这种想法是错的。我们可以看到&#xff0c;其实在一些社交平台&#xff0c;劫持其他人的session是非常容易的。我们以常见…

Nginx-Docker下安装Nginx并部署静态网站

一、Docker安装Nginx教程 Docker安装Nginx教程 二、Nginx部署静态网站 1. 把静态文件放到挂载的宿主机目录内&#xff1a; Docker nginx 容器内 /usr/share/nginx/html/ 挂载到了宿主机 /root/nginx/www/camelia是我这个静态网站的项目文件夹&#xff0c;里面包含css/js/ima…

爬虫 -----爬取某个网站信息

一.Java爬取某个网站的信息 1.项目gitee地址&#xff1a;https://gitee.com/Javaxieyue/reptiles.git 2.爬取网站的地址&#xff1a; http://www.mca.gov.cn//article/sj/xzqh/2020/2020/2020092500801.html 3.要求&#xff1a;需要对html页面有点了解&#xff0c;以便对爬…

Sharepoint 创建个人网站时出现错误。有关详细信息,请与网站管理员联系

SharePoint Server 2007 / MOSS 2007 中启用了个人网站功能&#xff0c;并且配置了正确的SSP&#xff0c;可是用户在访问我的网站时总是提示&#xff1a;创建个人网站时出现错误。有关详细信息&#xff0c;请与网站管理员联系。 MOSS服务器场 具体环境如下&#xff1a; AD服务…

tomcat出现404的原因_Seo优化,404页面优化,这样做有利于网站页面优化-深圳长诚网络...

404页面就是在用户访问你的网站的某个地址的时候&#xff0c;如果这个地址不存在或者内容删除后&#xff0c;展现给用户看的页面。大多数站长在做站内优化时都会有404设置这么一项工作。如如果没有设置404页面&#xff0c;那么用户或的页面就是一个错误的页面&#xff0c;则搜索…

谈谈网站静态化

写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通过一个项目,谈谈网站静态化后的架构设计方案,同时和大家探讨一下,在开源产品大行其道,言架构必称MemberCache, Nginx,的时…

非常推荐:搭建一个大型网站架构的实验环境(FreeBsd+Nginx+Squid+Apache)

非常具有教育性质的好贴&#xff0c;决定本周在家按照教程学习。

大型网站架构(转帖)--详细介绍阶段性需求和应对方法

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如 LiveJournal的、 ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什…

同服务器的网站被K该怎么办,网站首页被K应该如何处理?

原标题&#xff1a;网站首页被K应该如何处理&#xff1f;上个月小编手里有几个网站首页被K&#xff0c;整站的收录和索引都正常&#xff0c;内页的排名也还在&#xff0c;唯独首页被K了&#xff0c;找了很久也没找出原因所在。网站的服务器、站内代码、文章质量、友情链接、关键…

55个神奇的网站布局

我们总是在摸索着网站布局的效果展示&#xff0c;总是花费不少心思在考虑用户体验的极致所在&#xff0c;在这里我在一个国外的网站看到以下网站布局方式&#xff0c;实为好赞&#xff0c;所以贴下来分享&#xff0c;并从中我们可以去为移动终端这块做最新的参考与演化方式。。…

小网站架构优化-提升抗并发能力:子应用程序分离方案

前言&#xff1a;标题为啥要加个“小”&#xff0c;只因为上一篇文章“小网站架构优化&#xff1a;从100并发抗到4000并发”&#xff0c;带了个“小”字&#xff0c;所以这篇也顺流加个“小”了。大意“小”是特指秋色园&#xff08;流量小&#xff0c;服务器配置低&#xff09…

打造成功电子商务网站的六大设计准则

我能信任你吗&#xff1f;这是所有网购用户忐忑不安的下订单之前都会在心里向网站问的一个问题。 你不能因此指责他们&#xff0c;因为这个时候他们正将自己的信用卡信息提交到你的网站上&#xff0c;而这又仅仅是因为他们认为你会将商品寄送给他们。 关于电子商务网页设计一直…

使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...

在线演示 本地下载 如果你曾经开发过内容聚合类网站的话&#xff0c;使用程序动态整合来自不同页面或者网站内容的功能肯定对于你来说非常熟悉。通常使用java的话&#xff0c;我们都会使用到一些HTML的解析&#xff0c;例如&#xff0c;httpparser&#xff0c;最早gbin1.com的…

初步试用Squid的替代产品──Varnish Cache网站加速器

[2007-8-29 18:45 | by 张宴 ] Varnish是一款高性能的开源HTTP加速器&#xff0c;挪威最大的在线报纸 Verdens Gang (vg.no) 使用3台Varnish代替了原来的12台squid&#xff0c;性能比以前更好。Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&#xff0c;他认为现在…