当前位置: 首页 > wzjs >正文

网站制作需要什么软件有哪些浙江专业网站seo

网站制作需要什么软件有哪些,浙江专业网站seo,免费做网站怎么盈利,好看的旅游网站模版Spring Boot 实现图片防盗链教程(Referer 校验 Token 签名校验)本文将详细讲解两种防盗链实现方案,并提供完整代码示例。方案一:Referer 校验通过检查 HTTP 请求头中的 Referer 字段判断来源是否合法。实现步骤创建 Referer 拦截…

Spring Boot 实现图片防盗链教程(Referer 校验 + Token 签名校验)

本文将详细讲解两种防盗链实现方案,并提供完整代码示例。


方案一:Referer 校验

通过检查 HTTP 请求头中的 Referer 字段判断来源是否合法。

实现步骤
  1. 创建 Referer 拦截器

    @Component
    public class RefererInterceptor implements HandlerInterceptor {private final List<String> allowedDomains = Arrays.asList("https://yourdomain.com", "https://trusted-site.com");@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 获取 Referer 头String referer = request.getHeader("Referer");// 允许直接访问(如浏览器地址栏输入)if (referer == null) return true;// 验证 Referer 是否在白名单boolean isValid = allowedDomains.stream().anyMatch(domain -> referer.startsWith(domain));if (!isValid) {response.sendError(403, "Forbidden: Invalid Referer");return false;}return true;}
    }
  2. 注册拦截器到 Spring MVC

    @Configuration
    public class WebConfig implements WebMvcConfigurer {@Autowiredprivate RefererInterceptor refererInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 拦截图片路径registry.addInterceptor(refererInterceptor).addPathPatterns("/images/**");}
    }
  3. 测试效果

  • 合法访问:<img src="https://yourdomain.com/images/cat.jpg">

  • 盗链访问:<img src="https://yourdomain.com/images/cat.jpg" 在其他网站使用时返回 403


方案二:Token 签名校验

通过动态生成的签名 token 验证请求合法性(更安全)。

实现原理
  1. 生成图片 URL 时添加参数:/images/cat.jpg?t=时间戳&sign=签名

  2. 服务器验证签名和时间戳有效性

实现步骤
  1. 生成签名工具类(用非对称加密RSA更安全)

    
    public class TokenUtil {private static final String SECRET_KEY = "your_secret_123!";private static final long EXPIRE_SECONDS = 300; // 5分钟有效期// 生成带签名的URLpublic static String generateSignedUrl(String imagePath) {long timestamp = System.currentTimeMillis() / 1000;String sign = generateSign(imagePath, timestamp);return imagePath + "?t=" + timestamp + "&sign=" + sign;}// 生成签名 (使用HMAC-SHA256)private static String generateSign(String path, long timestamp) {String data = path + "|" + timestamp;return HmacUtils.hmacSha256Hex(SECRET_KEY, data);}// 验证签名public static boolean verifySign(String path, long timestamp, String sign) {// 检查过期时间long current = System.currentTimeMillis() / 1000;if (current - timestamp > EXPIRE_SECONDS) return false;// 验证签名String expectedSign = generateSign(path, timestamp);return expectedSign.equals(sign);}
    }
  2. 创建 Token 校验拦截器

    @Component
    public class TokenInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String imagePath = request.getRequestURI();String sign = request.getParameter("sign");String timestampStr = request.getParameter("t");// 参数缺失检查if (sign == null || timestampStr == null) {response.sendError(400, "Missing token parameters");return false;}try {long timestamp = Long.parseLong(timestampStr);if (!TokenUtil.verifySign(imagePath, timestamp, sign)) {response.sendError(403, "Invalid token");return false;}} catch (NumberFormatException e) {response.sendError(400, "Invalid timestamp format");return false;}return true;}
    }
  3. 注册拦截器

    @Configuration
    public class WebConfig implements WebMvcConfigurer {@Autowiredprivate TokenInterceptor tokenInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(tokenInterceptor).addPathPatterns("/images/**");}
    }
  4. 生成安全链接的 Controller

    @RestController
    public class ImageController {@GetMapping("/getImageUrl")public String getImageUrl(@RequestParam String imageName) {String imagePath = "/images/" + imageName;return TokenUtil.generateSignedUrl(imagePath);}
    }
  5. 前端使用示例

    <!-- 前端先请求获取合法链接 -->
    <script>
    fetch('/getImageUrl?imageName=cat.jpg').then(res => res.text()).then(url => {const img = document.createElement('img');img.src = url;document.body.appendChild(img);});
    </script>

两种方案对比
特性Referer 校验Token 校验
安全性中(Referer 可伪造)高(需破解签名算法)
实现复杂度简单中等
链接有效期永久可控制时效
跨浏览器支持部分浏览器禁用 Referer无兼容问题
防盗链效果可防普通盗链可防高级盗链

增强方案:双验证结合
// 在拦截器中组合验证
public boolean preHandle(...) {// 先验证 Refererif (!refererValid) {// 再验证 Token(给合法合作方提供Token访问方式)if (!tokenValid) {response.sendError(403);return false;}}return true;
}
注意事项
  1. Referer 校验的局限性

    • 浏览器可能不发送 Referer(如HTTPS->HTTP)

    • 可通过 <meta name="referrer" content="no-referrer"> 绕过

  2. Token 校验最佳实践

    • 使用 HTTPS 防止 Token 被截获

    • 定期轮换密钥

    • 对 IP 进行访问频率限制

http://www.dtcms.com/wzjs/97895.html

相关文章:

  • 机械类毕业设计代做网站推荐怎么注册个人网站
  • wordpress visual composer主题seo排名点击器
  • 做二手家具回收哪个网站好站长是什么级别
  • 施工企业工作环境seo搜索优化 指数
  • wordpress做视频网站吗友情链接发布网
  • 上海网站建设天锐科技排名优化哪家专业
  • 赣州网站建设需要多少钱今天宣布疫情最新消息
  • 武汉一医院网站建设seo网站优化推广
  • 企业文化建设的重要性seo关键字优化价格
  • 莱芜网站设计公司近期重大新闻事件10条
  • 内蒙古高等级公路建设开发有限责任公司网站淘宝seo什么意思
  • 网页设计实训报告格式重庆seo职位
  • 南京网站制作系统百度seo教程网
  • 营销crm系统网站设计线上推广渠道有哪些方式
  • wordpress怎么改图片seo分析案例
  • 做网站用哪个软件如何免费注册网站平台
  • 网站关键词优化怎么做淘宝标题优化网站
  • 注册网站在哪里创建广州今日头条新闻最新
  • 品牌故事浙江seo公司
  • 营销策划公司取名大全北京seo优化技术
  • 小米商城的网站建站外贸营销型网站制作
  • 成都网站推广经理2022百度指数排名
  • 手机app开发网站建设百度流量推广项目
  • 唯美网站建设北京网站优化seo
  • 有什么网站可以接单做兼职的跨国网站浏览器
  • 呼和浩特城乡建设委员会的网站知名网络营销推广
  • 那里有做像美团的网站的搜索引擎排名大全
  • 做网站的公司不会设计网站创建公司
  • 做剧情游戏的网站搜多多搜索引擎入口
  • wordpress文章点赞安卓优化大师下载安装到手机