欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringBoot實現(xiàn)fastdfs防盜鏈功能的示例代碼

 更新時間:2022年10月10日 09:04:47   作者:huan1993  
我們可以通過fastdfs實現(xiàn)一個分布式文件系統(tǒng),如果fastdfs部署在外網(wǎng),那么任何一個人知道了上傳接口,就可以實現(xiàn)文件的上傳和訪問。那么如何阻止他人訪問我們fastdfs服務器上的文件呢?此處就需要使用fastdfs的防盜鏈功能,本文就來講講如何實現(xiàn)這一功能

1、背景

我們可以通過fastdfs實現(xiàn)一個分布式文件系統(tǒng),如果我們的fastdfs部署在外網(wǎng),那么任何一個人知道了我們的上傳接口,那么它就可以文件的上傳和訪問。那么我們?nèi)绾巫柚顾嗽L問我們fastdfs服務器上的文件呢?此處就需要使用fastdfs的防盜鏈功能。

2、實現(xiàn)原理

fastdfs的防盜鏈是通過token機制來實現(xiàn)的。當我們開啟防盜鏈功能后,需要在url后增加2個額外的參數(shù)tokents。tokents的生成都是需要在服務端。

2.1 開啟防盜鏈

vim /etc/fdfs/http.conf

# true 表示開啟防盜鏈
http.anti_steal.check_token = true
# token的過期時間,單位為秒
http.anti_steal.token_ttl = 60
# 密鑰,不可泄漏,用于生成token
http.anti_steal.secret_key = thisisasecuritykey
# 當圖片拒絕訪問后,顯示的圖片,此圖片需要可訪問,不然可能會出現(xiàn)問題
http.anti_steal.token_check_fail = /data/fastdfs/401.jpg

http.anti_steal.token_check_fail 指定的圖片需要可訪問,否則可能會出現(xiàn)問題

2.2 重啟 nginx

/usr/local/nginx/sbin/nginx -s reload

2.3 Java代碼生成token

1、token生成規(guī)則

token = md5(文件ID+私鑰+時間戳)

文件ID:不能包含group

group1/M00/00/00/wKh5iWNBl7-AKvj1AAAwWD4VeAg577.jpg
`需要替換成`
M00/00/00/wKh5iWNBl7-AKvj1AAAwWD4VeAg577.jpg

私鑰:需要和 /etc/fdfs/http.conf 中的 http.anti_steal.secret_key 值一致

時間戳:單位秒

2、java生成token

/**
     * 生成token
     *
     * @param fileId          the filename return by FastDFS server,不能含有組
     * @param timestampSecond 時間戳 單位秒
     * @return token
     * @throws NoSuchAlgorithmException
     */
    private String generatorToken(String fileId, Long timestampSecond) throws NoSuchAlgorithmException {
        // 需要去掉 group
        fileId = fileId.substring(fileId.indexOf("/") + 1);
        byte[] bsFilename = fileId.getBytes(StandardCharsets.UTF_8);
        byte[] bsTimestamp = timestampSecond.toString().getBytes(StandardCharsets.UTF_8);
        // thisisasecuritykey 需要和 /etc/fdfs/http.conf 中的 http.anti_steal.secret_key 值一致
        byte[] bsKey = "thisisasecuritykey".getBytes(StandardCharsets.UTF_8);

        byte[] buff = new byte[bsFilename.length + bsKey.length + bsTimestamp.length];
        System.arraycopy(bsFilename, 0, buff, 0, bsFilename.length);
        System.arraycopy(bsKey, 0, buff, bsFilename.length, bsKey.length);
        System.arraycopy(bsTimestamp, 0, buff, bsFilename.length + bsKey.length, bsTimestamp.length);

        return md5(buff);
    }

    public static String md5(byte[] source) throws NoSuchAlgorithmException {
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        md.update(source);
        byte tmp[] = md.digest();
        char str[] = new char[32];
        int k = 0;
        for (int i = 0; i < 16; i++) {
            str[k++] = hexDigits[tmp[i] >>> 4 & 0xf];
            str[k++] = hexDigits[tmp[i] & 0xf];
        }

        return new String(str);
    }

3、測試

3.1 帶正確token訪問

3.2 帶錯誤token訪問

這個地方返回的圖片是 http.anti_steal.token_check_fail = /data/fastdfs/401.jpg 這個配置中配置的圖片。

4、項目代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-fastdfs

到此這篇關于詳解SpringBoot實現(xiàn)fastdfs防盜鏈功能的示例代碼的文章就介紹到這了,更多相關SpringBoot實現(xiàn)fastdfs防盜鏈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot之Jpa通用接口及公共方法使用示例

    springboot之Jpa通用接口及公共方法使用示例

    這篇文章主要為大家介紹了springboot?之Jpa通用接口及公共方法使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Java實現(xiàn)二維碼QRCode的編碼和解碼與示例解析

    Java實現(xiàn)二維碼QRCode的編碼和解碼與示例解析

    本文主要介紹Java實現(xiàn)二維碼QRCode的編碼和解碼,這里給大家一個小示例以便理解,有需要的小伙伴可以參考下
    2016-08-08
  • java根據(jù)富文本生成pdf文件過程解析

    java根據(jù)富文本生成pdf文件過程解析

    這篇文章主要介紹了java根據(jù)富文本生成pdf文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Redis?command?timed?out兩種異常情況的解決方式

    Redis?command?timed?out兩種異常情況的解決方式

    Redis是我們開發(fā)中常用的數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關于Redis?command?timed?out兩種異常情況的解決方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Java使用list集合remove需要注意的事項(使用示例)

    Java使用list集合remove需要注意的事項(使用示例)

    List集合的一個特點是它其中的元素是有序的,也就是說元素的下標是根據(jù)插入的順序來的,在刪除頭部或者中間的一個元素后,后面的元素下標會往前移動,本文給大家介紹Java使用list集合remove需要注意的事項,感興趣的朋友一起看看吧
    2022-01-01
  • Java SerialVersionUID作用詳解

    Java SerialVersionUID作用詳解

    這篇文章主要介紹了Java SerialVersionUID作用詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java 中的 String對象為什么是不可變的

    Java 中的 String對象為什么是不可變的

    String對象是不可變的,但這僅意味著你無法通過調(diào)用它的公有方法來改變它的值。本文給大家介紹java中的string對象為什么是不可變的,需要的朋友一起了解了解吧
    2015-10-10
  • Java父類繼承中的static和final用法

    Java父類繼承中的static和final用法

    這篇文章主要介紹了Java父類繼承中的static和final用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 全面解析Java中的GC與幽靈引用

    全面解析Java中的GC與幽靈引用

    一般的應用程序不會涉及到 Reference 編程, 但是了解這些知識會對理解 GC 的工作原理以及性能調(diào)優(yōu)有一定幫助,在實現(xiàn)一些基礎性設施比如緩存時也可能會用到,希望本文能有所幫助
    2013-09-09
  • Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片

    Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片

    這篇文章主要介紹了Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11

最新評論