日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用 Springboot + Nginx 的 http_secure_link_module 實現圖片防盜鏈在 Vue 展示

來源: 責編: 時間:2024-07-19 07:57:42 612觀看
導讀使用 Springboot + Nginx 的 http_secure_link_module 實現圖片防盜鏈并在 Vue 中展示功能在當今互聯網環境中,圖片資源的安全性和有效管理至關重要。為了防止未經授權的訪問和濫用圖片資源,我們采用 Nginx 的 http_sec

使用 Springboot + Nginx 的 http_secure_link_module 實現圖片防盜鏈并在 Vue 中展示功能

在當今互聯網環境中,圖片資源的安全性和有效管理至關重要。為了防止未經授權的訪問和濫用圖片資源,我們采用 Nginx 的 http_secure_link_module 模塊來實現圖片防盜鏈功能。這不僅能保護圖片的合法使用,還能有效控制資源的訪問權限,提升系統的安全性和穩定性。ZvU28資訊網——每日最新資訊28at.com

在本次配置中,我們對 secure_link 模塊進行了定制化的設置,以滿足特定的業務需求。通過引入 $remote_addr 變量,我們能夠更精確地控制訪問來源,進一步增強了防盜鏈的效果。同時,對密鑰的配置和 token 、過期時間的生成算法進行優化,確保了只有在合法條件下才能訪問圖片資源。ZvU28資訊網——每日最新資訊28at.com

Nginx 配置(nginx.conf)

user  nginx;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    include       /etc/nginx/mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  /var/log/nginx/access.log  main;    sendfile        on;    keepalive_timeout  65;    # 啟用 secure_link 模塊    server {        listen 80;        server_name  your_domain;        # 私有密鑰配置        secure_link_secret your_private_secret;  # 此處的密鑰是用于生成和驗證 token 的關鍵元素,需要妥善保管和保密。它參與了 MD5 哈希計算,確保 token 的唯一性和安全性。        location /images {            secure_link $arg_token,$arg_expires,$remote_addr;            secure_link_md5 "$secure_link_secret$uri$arg_expires$remote_addr";  # 這個表達式詳細說明了如何根據密鑰、圖片的 URI、過期時間和客戶端的 IP 地址生成 MD5 哈希值,用于驗證請求的合法性。            if ($secure_link = "") {  # 如果 token 為空,直接拒絕訪問,返回 403 禁止訪問狀態碼。                return 403;            }            if ($secure_link = "0") {  # 如果 token 驗證失敗,返回 410 資源已不存在的狀態碼。                return 410;            }            root /path/to/images;  # 指定圖片的實際存儲路徑,確保 Nginx 能夠正確找到并提供服務。        }    }}

Pom.xml 依賴配置

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>image-security</artifactId>    <version>1.0.0-SNAPSHOT</version>    <properties>        <java.version>11</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.yaml</groupId>            <artifactId>snakeyaml</artifactId>            <version>1.33</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

Yaml 配置文件(application.yml)

image:  domain: http://your_domainnginx:  secure-link-secret: your_secure_link_secret

ImageController 類(ImageController.java)

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.core.env.Environment;import org.springframework.stereotype.Controller;import org.yaml.snakeyaml.Yaml;import java.io.InputStream;import java.util.Map;@Controllerpublic class ImageController {    @Autowired    private Environment environment;    public String generateImageUrl(String imageName) {        String imageDomain = environment.getProperty("image.domain");        // 生成過期時間(假設 1 小時后過期)        LocalDateTime expirationTime = LocalDateTime.now().plusHours(1);        long expiresInSeconds = expirationTime.toEpochSecond(ZoneOffset.UTC);        // 生成 token        String token = generateToken(imageName, expiresInSeconds);        return imageDomain + "/images/" + imageName + "?token=" + token + "&expires=" + expiresInSeconds;    }    private String generateToken(String uri, long expires) {        String secret = environment.getProperty("nginx.secure-link-secret");        String data = uri + expires + secret;        try {            MessageDigest digest = MessageDigest.getInstance("MD5");            byte[] hash = digest.digest(data.getBytes());            return Base64.getUrlEncoder().encodeToString(hash);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();            return null;        }    }}

Spring Boot 控制器生成圖片列表

import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.List;@RestController@RequestMapping("/image")public class ImageController {    @GetMapping("/list")    public List<String> getImageList() {        List<String> imageUrls = new ArrayList<>();        imageUrls.add(generateImageUrl("image1.jpg"));        imageUrls.add(generateImageUrl("image2.jpg"));        // 此處根據實際邏輯生成帶有 token 和 expires 參數的圖片鏈接        return imageUrls;    }}

Vue 中展示圖片列表

<template>  <div>    <ul>      <li v-for="imageUrl in imageList" :key="imageUrl">        <img :src="imageUrl" />      </li>    </ul>  </div></template><script>export default {  data() {    return {      imageList: []    };  },  mounted() {    // 發送請求獲取圖片列表    this.$http.get('/image/list')     .then(response => {        const imageDomain = '${process.env.VUE_APP_IMAGE_DOMAIN}';        this.imageList = response.data.map(url => imageDomain + url);      })     .catch(error => {        console.error('獲取圖片列表失敗', error);      });  }};</script>

總結

本次方案通過引入 Nginx 的 http_secure_link_module 模塊實現了圖片防盜鏈功能,增強了圖片資源的安全性。在配置方面,我們使用 Yaml 文件來管理關鍵配置信息,包括圖片域名和 Nginx 的安全鏈接密鑰。通過在 ImageController 類中讀取這些配置,生成帶有令牌和過期時間的圖片 URL。在 Vue 端,我們根據配置的域名來完整地構建圖片的訪問地址。整個方案具有良好的靈活性和可擴展性,能夠根據實際業務需求進行調整和優化,有效保護圖片資源的合法訪問和使用。ZvU28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-101706-0.html使用 Springboot + Nginx 的 http_secure_link_module 實現圖片防盜鏈在 Vue 展示

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2024 React 生態工具最能打的組合!

下一篇: Python 中窗口操作的完整指南

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
伊人成人在线| 老司机午夜精品视频| 一区二区三区国产盗摄| 欧美成人资源网| 蜜桃久久精品乱码一区二区| 国产精品av久久久久久麻豆网| 久久久精品一品道一区| 欧美日韩喷水| 亚洲一区二区三区视频| 国产精品久久久免费 | 欧美日在线观看| 久久激五月天综合精品| 国产伦一区二区三区色一情| 久久综合999| 欧美日韩视频在线| 国产情侣一区| 亚洲国产一区二区三区青草影视| 国产精品99久久久久久久久久久久| 午夜视频一区二区| 欧美成人乱码一区二区三区| 国产精品theporn| 精品不卡一区| 一区二区三区www| 久久久另类综合| 国产精品激情偷乱一区二区∴| 一区免费视频| 亚洲直播在线一区| 免费亚洲网站| 国产视频精品va久久久久久| 99精品欧美| 久久影院午夜片一区| 国产精品美女999| 亚洲三级影院| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品日韩久久久| 亚洲国产精品成人综合色在线婷婷| 亚洲综合不卡| 欧美精品一区二区三区蜜臀| 韩国女主播一区二区三区| 亚洲视频一区二区| 欧美激情网站在线观看| 国语自产精品视频在线看抢先版结局| 一区二区三区毛片| 欧美成人精品1314www| 国产丝袜一区二区三区| 亚洲一区二区动漫| 欧美精品手机在线| 亚洲丶国产丶欧美一区二区三区| 午夜久久美女| 国产精品豆花视频| av成人免费观看| 欧美二区在线| 在线成人av| 久久国产日本精品| 国产精品三区www17con| 一区二区三区不卡视频在线观看 | 国产精品v片在线观看不卡| 91久久在线| 久色婷婷小香蕉久久| 国内精品一区二区| 欧美一区日韩一区| 国产精品丝袜xxxxxxx| 亚洲视频你懂的| 欧美日韩国产精品一区二区亚洲| 亚洲人成精品久久久久| 蜜臀a∨国产成人精品| 韩国三级电影一区二区| 欧美影视一区| 国产日韩av在线播放| 香蕉免费一区二区三区在线观看| 国产精品美女黄网| 亚洲欧美日韩国产另类专区| 国产精品啊v在线| 亚洲一线二线三线久久久| 欧美亚洲成人免费| 中文av字幕一区| 欧美三区在线视频| 亚洲视频一区在线观看| 国产精品国产a级| 亚洲一区日本| 国产精品日日摸夜夜添夜夜av| 亚洲视频在线播放| 国产精品久99| 午夜精品久久久| 国产日韩av一区二区| 久久国产精品久久精品国产| 国产视频在线观看一区二区三区 | 欧美一区二区在线免费观看| 国产欧美一区二区三区久久人妖| 午夜一级久久| 狠狠综合久久av一区二区小说| 久久婷婷国产综合尤物精品| 在线看日韩欧美| 欧美承认网站| 日韩亚洲一区二区| 国产精品v欧美精品v日韩| 亚洲欧美一区二区三区久久| 国产欧美日韩另类一区| 久久久91精品国产一区二区三区 | 久久成人综合视频| 一区二区在线观看视频| 欧美sm极限捆绑bd| 99精品国产热久久91蜜凸| 国产精品r级在线| 欧美一区二区三区视频免费| 狠狠色丁香婷婷综合影院| 老司机免费视频一区二区| 亚洲国产一区二区视频| 欧美区一区二| 亚洲欧美日韩一区| 精品成人在线视频| 欧美精品国产精品| 亚洲制服丝袜在线| 激情视频一区二区三区| 欧美搞黄网站| 亚洲一区3d动漫同人无遮挡| 国产精品资源| 美女亚洲精品| 亚洲深爱激情| 一区二区三区我不卡| 欧美精品高清视频| 午夜在线成人av| 亚洲高清自拍| 欧美日韩免费观看一区三区 | 狠狠色丁香久久婷婷综合_中| 欧美激情1区| 亚洲一区二区三区色| 韩日欧美一区二区三区| 欧美精品在线一区二区三区| 午夜国产一区| 亚洲国产日韩一区| 国产精品成人观看视频国产奇米| 久久精品免费播放| 亚洲精品在线电影| 国产区二精品视| 欧美区国产区| 久久精品欧洲| 一区二区精品国产| 好吊成人免视频| 欧美午夜欧美| 免费在线一区二区| 亚洲欧美日韩国产综合在线| 18成人免费观看视频| 国产精品久久久亚洲一区| 老巨人导航500精品| 午夜国产精品视频| 亚洲免费观看| 狠狠色狠狠色综合日日五| 欧美三区美女| 欧美国产专区| 久久久亚洲成人| 亚洲一区二区三区激情| 亚洲国产精品成人| 国产专区精品视频| 国产精品久久网站| 欧美福利电影在线观看| 欧美一区二区三区四区在线观看地址 | 亚洲成色777777女色窝| 国产精品久久久久久一区二区三区| 免费国产一区二区| 欧美亚洲综合久久| 9国产精品视频| 亚洲欧洲三级| 一区二区视频在线观看| 国产精品手机视频| 欧美日韩在线另类| 欧美福利电影网| 久久露脸国产精品| 亚洲欧美一区二区三区极速播放| 亚洲美女中文字幕| 亚洲第一福利在线观看| 国产婷婷成人久久av免费高清| 欧美午夜精品一区| 欧美精品亚洲精品| 美日韩精品免费| 久久偷看各类wc女厕嘘嘘偷窃| 午夜在线a亚洲v天堂网2018| 亚洲先锋成人| 亚洲视频综合| 中文成人激情娱乐网| 日韩视频一区二区在线观看 | 午夜欧美大片免费观看| 亚洲无人区一区| 亚洲视频碰碰| 一区二区三区精密机械公司| 亚洲精品久久久久久下一站| 亚洲国产成人精品女人久久久 | 在线视频免费在线观看一区二区| 亚洲日韩欧美视频一区| 亚洲黄色成人| 91久久精品网| 亚洲欧洲偷拍精品| 亚洲欧洲一区二区三区| 亚洲国产专区校园欧美| 亚洲国产精品久久人人爱蜜臀| 亚洲第一视频| 亚洲国产精品传媒在线观看| 在线观看视频一区| 在线免费观看视频一区| 在线日韩成人| 亚洲国产专区| 亚洲精品老司机| 日韩视频在线一区二区三区| 99人久久精品视频最新地址|