最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、背景

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

2、實現(xiàn)原理

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

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
# 當(dāng)圖片拒絕訪問后,顯示的圖片,此圖片需要可訪問,不然可能會出現(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

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

相關(guān)文章

  • Spring中的AutowireCandidateResolver的具體使用詳解

    Spring中的AutowireCandidateResolver的具體使用詳解

    這篇文章主要介紹了Spring中的AutowireCandidateResolver的具體使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 關(guān)于HashMap源碼解讀

    關(guān)于HashMap源碼解讀

    HashMap是基于哈希表的Map接口實現(xiàn),主要用于存儲鍵值對,它通過數(shù)組、鏈表和紅黑樹來實現(xiàn),解決了哈希沖突問題,Java?8中,HashMap對數(shù)據(jù)結(jié)構(gòu)進行了優(yōu)化,引入紅黑樹來提高查找效率,此外,HashMap是非線程安全的,適用于單線程環(huán)境
    2024-09-09
  • Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    Java將字符串String轉(zhuǎn)換為整型Int的兩種方式

    這篇文章主要介紹了Java如何將字符串String轉(zhuǎn)換為整型Int,在 Java 中要將 String 類型轉(zhuǎn)化為 int 類型時,需要使用 Integer 類中的 parseInt() 方法或者 valueOf() 方法進行轉(zhuǎn)換,本文通過實例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04
  • idea克隆maven項目的方法步驟(圖文)

    idea克隆maven項目的方法步驟(圖文)

    這篇文章主要介紹了idea克隆maven項目的方法步驟(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • redis分布式鎖RedissonLock的實現(xiàn)細(xì)節(jié)解析

    redis分布式鎖RedissonLock的實現(xiàn)細(xì)節(jié)解析

    這篇文章主要介紹了redis分布式鎖RedissonLock的實現(xiàn)細(xì)節(jié)解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis日志配置方式(slf4j、log4j、log4j2)

    Mybatis日志配置方式(slf4j、log4j、log4j2)

    這篇文章主要介紹了Mybatis日志配置方式(slf4j、log4j、log4j2),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java String字符串和Unicode字符相互轉(zhuǎn)換代碼

    Java String字符串和Unicode字符相互轉(zhuǎn)換代碼

    這篇文章主要介紹了Java String字符串和Unicode字符相互轉(zhuǎn)換代碼,需要的朋友可以參考下
    2014-10-10
  • IDEA創(chuàng)建Maven一直爆紅無法下載的問題解決辦法

    IDEA創(chuàng)建Maven一直爆紅無法下載的問題解決辦法

    這篇文章主要介紹了關(guān)于IDEA創(chuàng)建Maven一直爆紅無法下載的問題的解決辦法,文中圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家解決辦法非常有用,需要的朋友可以參考下
    2024-06-06
  • 一文學(xué)會處理SpringBoot統(tǒng)一返回格式

    一文學(xué)會處理SpringBoot統(tǒng)一返回格式

    這篇文章主要介紹了一文學(xué)會處理SpringBoot統(tǒng)一返回格式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解Spring bean的注解注入之@Autowired的原理及使用

    詳解Spring bean的注解注入之@Autowired的原理及使用

    之前講過bean注入是什么,也使用了xml的配置文件進行bean注入,這也是Spring的最原始的注入方式(xml注入).本文主要講解的注解有以下幾個:@Autowired、 @Service、@Repository、@Controller 、@Component、@Bean、@Configuration、@Resource ,需要的朋友可以參考下
    2021-06-06

最新評論

玉树县| 安庆市| 青田县| 大丰市| 惠安县| 桐庐县| 甘德县| 赣州市| 浦东新区| 宜州市| 高安市| 马公市| 红桥区| 正镶白旗| 安龙县| 沾化县| 衢州市| 青海省| 襄樊市| 应用必备| 瑞丽市| 西城区| 抚州市| 英山县| 富源县| 石台县| 永胜县| 肃宁县| 武安市| 德惠市| 关岭| 永安市| 桃园县| 读书| 教育| 邵阳县| 衡东县| 广安市| 邵武市| 新兴县| 清丰县|