【Spring Boot编程】Spring Boot实现防盗链功能详解

news/2025/1/23 13:12:21/文章来源:https://www.cnblogs.com/o-O-oO/p/18687589

前言

在当今的互联网环境中,资源的保护愈发重要。防盗链作为一种保护网站资源不被其他网站随意盗用的手段,显得尤为关键。本文将详细介绍如何在Spring Boot项目中实现防盗链功能。

什么是防盗链

防盗链是指防止未经授权的网站通过链接直接访问本网站的资源,比如图片、视频、文件等。常见的盗链行为是其他网站通过在其页面中嵌入指向我们网站资源的链接,让用户在其网站上看似正常访问这些资源,实则消耗的是我们网站的带宽和服务器资源。

实现防盗链的原理

在HTTP请求中,有一个重要的头部字段Referer,它记录了请求来源的页面地址。我们可以通过检查这个字段来判断请求是否来自合法的来源。如果请求的Referer不是我们信任的域名,那么就可以认为这是一个盗链请求,从而拒绝该请求。

具体实现

编写防盗链过滤器

public class AntiLeechFilter implements Filter {private List<String> allowedDomains;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 从配置文件中获取允许的域名列表String allowedDomainsStr = filterConfig.getInitParameter("allowedDomains");allowedDomains = Arrays.asList(allowedDomainsStr.split(","));}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;String referer = request.getHeader("Referer");if (referer == null) {// 没有Referer,可能是直接在浏览器地址栏输入,也视为非法请求response.sendError(HttpServletResponse.SC_FORBIDDEN, "Forbidden");return;}boolean isValidReferer = false;for (String domain : allowedDomains) {if (referer.startsWith(domain)) {isValidReferer = true;break;}}if (!isValidReferer) {response.sendError(HttpServletResponse.SC_FORBIDDEN, "Forbidden");return;}filterChain.doFilter(request, response);}@Overridepublic void destroy() {// 清理资源}
}

配置过滤器

@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<AntiLeechFilter> antiLeechFilterRegistrationBean() {FilterRegistrationBean<AntiLeechFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new AntiLeechFilter());registrationBean.addUrlPatterns("/resources/*"); // 对需要保护的资源路径进行过滤registrationBean.addInitParameter("allowedDomains", "http://yourdomain.com,https://yourdomain.com");return registrationBean;}
}

最后

通过检查请求的Referer字段,有效防止了资源被非法盗用。在实际应用中,可以根据具体需求进一步优化和扩展防盗链的逻辑,比如支持更多的请求头检查方式、动态更新允许的域名列表等。

原创 一安 一安未来

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

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

相关文章

5 链路层

5 链路层 5.1 概述 节点(node):运行链路层协议的设备(主机、路由器、交换机、WiFi接入点) 链路(link):沿着通信路径连接相邻节点的通信信道 数据链路层(data link layer):将数据报封装在链路层帧(frame)中通过通信链路从一个节点传输到另一个节点 链路层提供的服务…

【动态规划】01背包专题

01背包在恰好等于的情况下求最小物品数 MELON的难题每个物品(石头)的价值w[i]就是其自己的个数,为1 体积题目已给出。 状态定义:f[i][j]表示在前i个物品中选,且体积总和恰好等于j需要的物品个数的最小值 初始化: f[i][0] = 0 , 1 <= i <= n f[0][j] = INF, 1 <=…

阿里开源语音克隆CosyVoice2 整合包

CosyVoice2 win整合包 语音克隆CosyVoice2 链接:https://pan.quark.cn/s/5e75615a5cd4 修改webui.py默认值: # 修改默认推理模式 mode_checkbox_group = gr.Radio(choices=inference_mode_list, label=选择推理模式, value=inference_mode_list[1])# 修改随机推理种子 seed =…

KeyClicker 为用户带来真实键盘打字声音体验的应用,再现机械键盘与打字机的打字感受

如果你是一名作家,或者对打字机的声音情有独钟,KeyClicker 将是你的理想选择。许多作家认为,打字机的声音能让他们更专注、更有创作灵感。虽然实体打字机的魅力独特,但它缺乏现代设备的便捷功能,例如高效的编辑与数字化操作。而使用 KeyClicker,你既能享受打字机的经典声…

gdb调试小技巧——多个窗口显示

先用tty显示需要显示的终端的序号 ┌──(root㉿kali)-[~] └─# tty /dev/pts/3然后 vim ~/.gdbinit在文件后加一行 set context-output /dev/pts/2这里数字就是tty显示的数字 设置好之后打开gdb时就可以了

道路流量监测摄像机

道路流量监测摄像机是一种结合了监控摄像技术和交通管理的先进设备,旨在通过实时监测和分析道路上车辆的行驶情况,收集交通流量数据并进行统计分析。这种摄像机在城市交通管理、道路规划、交通安全等领域有着广泛的应用前景。道路流量监测摄像机是一种结合了监控摄像技术和交…

占用消防通道监测摄像机

占用消防通道监测摄像机是一种结合了智能分析技术和监控技术的先进设备,在预防火灾事故和保障人员安全方面具有重要意义。随着社会对安全意识不断提高以及相关法规标准日益完善,相信这种先进设备将会在更多领域得到广泛应用,并为我们创造更加安全、有序的公共环境。占用消防…

安全帽佩戴识别摄像机

安全帽佩戴识别摄像机的应用不仅仅是对现有安全管理模式的一种补充,更是对安全理念的一种革新。它打破了传统安全管理中依靠人工巡检、监督的局限性,实现了安全管理的自动化、智能化。它以一种高效、精准、持续的方式,让安全管理无处不在,让每一个工作人员都时刻处于安全的…

戴头盔识别摄像机

戴头盔识别摄像机是一种结合了智能分析技术和监控技术的先进设备,在提高安全意识和减少事故风险方面具有重要意义。随着社会对安全生产和公共秩序关注度不断提高以及相关法规标准日趋完善,相信这种先进设备将会在更多领域得到广泛应用,并为我们创造更加安全、健康的生活环境…

38个!第六批产业技术基础公共服务平台名单公布

https://mp.weixin.qq.com/s?__biz=MjM5OTUwMTc2OA==&mid=2650924081&idx=1&sn=4b020757ad7a231d0391def504479dbc&chksm=bddf0a2406acfe4e2b9612d57d3de64162d337594a44dc7f061cddcebc4d3a4982a904eb621e&scene=126&sessionid=1737537299#rd

c语言训练程序思维——贪吃蛇未完成版

c语言做的贪吃蛇,未完成,还剩“吃苹果”和“方向”,感兴趣者可以下载玩玩。(初学者,适合训练程序思维,涉及:多维数据、指针(非常值得关注)、结构体……) 通过网盘分享的文件:贪吃蛇源码分享(未完成)链接: https://pan.baidu.com/s/1FciXKqFRG3ZFUMnj7JjtTA 提取码…

plot--绘图库

目录plot--绘图库原文地址简介快速使用 plot--绘图库 原文地址 https://darjun.github.io/2020/04/12/godailylib/plot/简介 本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们…