防盗链与springboot代理模式(图片文件转发)

在Spring Boot中转发照片流 @ApiOperation(value = "显示图片", notes = "显示图片") @GetMapping(value = "/showPic/{id}") public void showPic(@PathVariable String id,HttpServletResponse response) { try { 阅读详情
在搭建自己的博客网站的时候,很有可能要引入一些外部图片,毕竟多数人最开始不是在自己的平台上写博客。  
因某种需要,搬运自己以前写的博客到自己的网站时,在图片这一步可能会出现问题,无法显示。其中往往就是防盗链在起作用了

防盗链

定义

百度百科给的解释是

此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

可能有点不易懂,通俗的讲,就是 出于某些原因(服务器或图片来源等),从别的网站引入图片到自己的网站中。这样连服务器的存储空间费用都省了( •̀ ω •́ )✧

原理

防盗链实现的原理就是:http协议中有个叫referer的表头字段,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源,就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。比如防盗链通常返回的403 forbidden。

实现

apache 服务器通常使用它的 Url Rewrite功能来实现

具体可参考 这篇文章

反防盗链

任何事物都有相对的两面,既然有了防盗链,那么肯定也有反防盗链。

下载文件

将目标文件下载到自己的服务器,然后从本地读取,这个方法应该算是比较憨厚的一种了。不过准确说这个也不算啥反防盗链

使用代理模式

就是下面详细讲的代理模式

文件代理模式

由于防盗链的关键在于referer头部, 而浏览器获取图片时,它会老实的填上真是来源。比如从某个博客访问,就填上博客地址。不过我们手动访问图片地址时,是不带referer的,这时就可以访问。因此,我们可以实现一个代理模式,来转发图片。
比如有防盗链的图片地址 www.aa.com, 服务器地址 www.bb.com, 先让服务器来请求(不带referer)得到图片,再将请求到的图片转发给目标网站(比如个人博客网站)。也就是博客上的图片src直接填

www.bb.com/forward?url=www.aa.com

当然我们要在服务器上实现相应的图片转发功能。

下面将以springboot 为例,实现图片转发:


首先设置相应接口

    @RequestMapping(value = "/forward")
    public ResponseEntity<Resource> forward(@RequestParam(name = "url", required = true) String url){
        System.out.println("Start: ------------------------->");

        Resource resource = null;

        InputStream inputStream;
        try {
            inputStream = new URL(url).openStream();

            resource = new ByteArrayResource(toByteArray(inputStream));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseEntity.ok()
                .contentType(MediaType.IMAGE_PNG)
                .header(HttpHeaders.CONTENT_DISPOSITION, " filename=\"" + getFileName(url) + "\"")
                .body(resource);
    }

加上ResponseEntity是为了更好的控制Response,比如响应的头部信息等。

其中的toByteArray()函数为

 private byte[] toByteArray(InputStream in){
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try {
            byte[] bytes = new byte[1024];
            int n;
            while ((n = in.read(bytes)) != -1){
                byteArrayOutputStream.write(bytes, 0, n);
            }
            System.out.println(byteArrayOutputStream.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return byteArrayOutputStream.toByteArray();
    }

getFileName()函数为

    private String getFileName(String url){
        String[] strs = url.split("/");
        for (String str: strs){
            // 这里我仅处理png格式的,根据需求修改即可
            if (str.toLowerCase().endsWith(".png")){
                return str;
            }
        }
        return null;
    }

最后

就以cnblog上一图片 https://img2018.cnblogs.com/blog/1470456/201812/1470456-20181206174653015-309070173.png 举个例子
如图,转发成功(~ ̄▽ ̄)~

Minio集群部署 1. 准备部署 1.1. 版本说明 1.2. 分区配置 2. 部署minio 2.1. 二进制包 2.2. 启动minio 3. prometheus监控 3.1. 安装mc 3.2. 配置mc 4. 附录 4.1. 数据在磁盘的组织形式 4.1.1. 小文件 4.1.1.1. 探索 4.1.1.2. 结论 4.1.2. 大文件 4.1.2.1. 结论 4.2. 扩容 4.3. 更换硬盘/更换主机 4.4. 推荐配置 [4.5. server pool1](#45-.. 阅读详情

相关推荐

SpringBoot三招搞定图片防盗链,再也不用担心流量被偷!

最近我的个人博客遇到一件糟心事——某天查看服务器日志,发现图片请求量暴增3倍!顺着访问记录查下去,结果发现十几个营销号网站居然直接盗用我的图片链接。每月几十G的流量就这么白白浪费,气得我连夜研究出这套SpringBoot防盗链方案,亲测有效!举个栗子🌰:你花大价钱买了云服务器,精心制作了原创图片。结果隔壁老王在他的网站直接用,用户访问老王网站时,图片加载消耗的却是你的服务器流量!这就是典型的盗链行为。防盗链核心原理: 当浏览器请求图片时,服务器会检查请求头中的字段(即来源页面地址)。如果是非法站点,直接返

cly10011的博客 1026

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器,用于存储大量的数据,同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。通过这些步骤,你可以在 MinIO 中配置防盗链以增强数据安全性。发布文章,转载请附上原文出处链接和本声明。

HCIE 数通、RHCE、HCIP 欧拉、MySQL OCP 持证工程师。 2564

SpringBoot 实现图片防盗链功能

前言出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地址后被下载。或者,不想浏览器直接访问图片链接。出于性能考虑,不想要别人的网站,拿着我们的图片链接去展示,白白消耗自己的服务器资源。故而可在springboot中,使用简单的图片防盗链规则。拦截掉一些处理。

Mr丶·Zhou博客 695

Java破解图片防盗链-图片文件转发

springboot 破解图片防盗链

Mr丶GUO 914

SpringBoot防盗链:给图片加个“防沉迷“系统?——让盗链者再也无法“上瘾“!

本文提出SpringBoot防盗链的"五步防沉迷系统",强调多层防御而非简单的Referer校验。通过五层防护机制:Referer校验(防外部引用)、Host头校验(防代理穿透)、Token签名验证(防URL爬取)、时间戳限制(防长期有效链接)和白名单路径(防误伤),构建完整的防盗链体系。文章详细解析了每层防护的原理和代码实现,包括域名精确匹配、子域名匹配及正则表达式支持,并提供了完整的Java代码示例,展示如何通过多层防御有效防止资源盗链。

墨夶的博客 1404

文件对象管理器(集成MinIO、阿里云OSS基本操作及临时token获取)

文件对象管理器(集成MinIO、阿里云OSS基本操作及临时token获取)

前端实现图片防盗链技术详解 - 原理分析与SpringBoot解决方案

在现代 Web 应用中,网站往往需要展示大量图片资源(商品图、文章配图、用户头像等)。若不做防护,其他站点或爬虫可以直接引用这些图片 URL,占用带宽、盗用版权、造成服务器压力过大。为此,我们需要为图片资源加一道“防盗链”保护,确保只有合法来源或携带正确凭证的请求才能成功获取图片。本文博主将带着小伙伴们深入解析防盗链技术原理,并提供前后端完整解决方案。

Micro麦可乐的博客 8550

一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通

晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。

学习帮的博客 9万+

SpringBoot 实现图片防盗链:资源保护实战详解与优化

网站图片频繁被盗用?这套SpringBoot防盗链方案让你一招制敌!从Referer检测到签名URL,从简单配置到高性能优化,全方位保护你的图片资源,节省宝贵带宽。

异常君的博客 1334

实测!Gemini+ChatGPT赋能学术写作:我的论文写作SOP(附提示词)

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。为什么ChatGPT逻辑清晰却写不长?为什么Gemini能深入分析但废话连篇?这其实是两种模型架构的本质差异,GPT系列擅长指令跟随和语言精炼,而Gemini原生支持超长上下文,适合深度文本生成。两者在深度生成与精炼表达上形成了天然互补。我们可以将它们组合起来使用发挥他们各自的特长。

智能AI让学术科研更容易 521

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2819

springboot实现文件防盗链设计

`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!

shigen的博客 1309

大数据平台符合信创(CDH国产化代替)详细方案(企业内部不外传方案)

信创旨在实现信息技术产业的自主可控,减少对外部技术的依赖,从而提升国家信息安全和经济发展的自主性。在此背景下,中国对信创提出了更高的要求,以期在激烈的市场竞争中占据有利地位。信创不仅关乎技术层面的创新,更涉及到产业链条的整合与优化。它要求从基础硬件、操作系统、数据库、中间件等各个层面实现国产替代,构建完整的信息技术生态体系。尤其是在做国企项目时,就有硬性要求使用符合信创(国产代替)。在信创背景下,符合要求的产品必须具备自主可控、安全可靠以及性能卓越等核心特点。

大模型大数据攻城狮的专栏 3510

【SpringBoot】实现图片防盗链功能

出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地址后被下载。或者,不想浏览器直接访问图片链接。出于性能考虑,不想要别人的网站,拿着我们的图片链接去展示,白白消耗自己的服务器资源。故而可在springboot中,使用简单的图片防盗链规则。拦截掉一些处理。

北海_南风 901

leetcode134 加油站

题目如下 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说明: 如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输...

ayang818 's blog 234

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

图片防盗链如何实现?用SpringBoot轻松搞定

出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地址后被下载。或者,不想浏览器直接访问图片链接。出于性能考虑,不想要别人的网站,拿着我们的图片链接去展示,白白消耗自己的服务器资源。故而可在springboot中,使用简单的图片防盗链规则。拦截掉一些处理。

kangbin825的专栏 774

基于THUCNews数据集bert bert_wwm的新闻文本分类

基于THUCNews数据集bert bert_wwm的新闻文本分类

984

Referer不可靠?看我用SpringBoot打造真正靠谱的防盗链

本文揭露了Referer检查的三大致命缺陷:可伪造性、隐私浏览器影响和数据URI绕过,证明其无法真正实现防盗链。作者提出Token验证+Nginx双重防护的解决方案,详细介绍了Token验证的原理和优势,包括不可伪造、时效性等特性,并提供了SpringBoot实现Token生成与验证的完整代码示例。该方案通过生成带签名的临时令牌,为每张图片创建"临时通行证",有效防止资源盗用。

墨夶的博客 2538

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: GoLang爬取花瓣网美女图片
下一篇: Tomcat配置自定义访问日志 --- 获取请求头部信息
Asche910
博客等级 码龄11年 65粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值