FastDFS防盗链
FastDFS扩展模块内置了通过token来实现防盗链的功能。开启防盗链后,访问文件是需要在url中加两个参数:token和ts。ts为时间戳,token为系统根据时间戳和密码生成的信物。为了系统的安全,下面一起来开启防盗链吧!
1. 配置http访问
1.1 开启防盗链检查
vim /etc/fdfs/http.conf
# HTTP default content type
http.default_content_type = application/octet-stream # MIME types mapping filename
# MIME types file format: MIME_type extensions
# such as: image/jpeg jpeg jpg jpe
# you can use apache's MIME file: mime.types
http.mime_types_filename=mime.types # if use token to anti-steal
# default value is false (0)
http.anti_steal.check_token=true # 修改1,开启防盗链检查 # token TTL (time to live), seconds
# default value is 600
http.anti_steal.token_ttl=900 # 选择性修改token的过期时间 # secret key to generate anti-steal token
# this parameter must be set when http.anti_steal.check_token set to true·
# the length of the secret key should not exceed 128 bytes
http.anti_steal.secret_key=123456 # 修改2,防盗链密码 # return the content of the file when check token fail
# default value is empty (no file sepecified)
http.anti_steal.token_check_fail=/root/error.jpg # 修改3,配置拒绝访问后显示的图片,需要是个有效可访问的图片 # if support multi regions for HTTP Range
# default value is true
http.multi_range.enabed = true
1.2 重启nginx
service nginx restart
# 或
nginx -s reload
1.3 验证
没有开启防盗链,文件可以正常访问:
成功开启防盗链后,访问文件时携带了错误的token,文件不能访问并且显示访问出错的图片
携带正确的token,效果已经达到,只要保证密码不被泄露,我们的文件就是相对安全的
2. 开发服务端代码修改
2.1 fdfs_client.conf配置
http.anti_steal_token = true # 启动防盗链
http.secret_key = 123456 # 防盗链密码 tracker_server=192.168.56.10:22122
tracker_server=192.168.56.11:22122
2.2 服务器端
服务器端为文件访问生成token
remoteFilename:不能加group1(group name)
package com.aixin.tuna.fdfs; import org.csource.common.MyException;
import org.csource.fastdfs.ProtoCommon; import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException; /**
* Created by dailin on 2018/6/12.
*/
public class FdfsFDL {
public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException {
String fileName = "M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png";
String host = "http://192.168.56.10:8888";
String secretKey = "";
String sourceUrl = getSourceUrl(fileName, host, secretKey);
System.out.println(sourceUrl);
} /**
* 生成防盗链token
* @param remoteFilename 文件路径,不带group:M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png
* @param httpHost 文件服务器web访问地址
* @param secretKey 密码
* @return
* @throws UnsupportedEncodingException
* @throws NoSuchAlgorithmException
* @throws MyException
*/
public static String getSourceUrl(String remoteFilename, String httpHost,String secretKey) throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException {
int lts = (int)(System.currentTimeMillis() / 1000);
String token = ProtoCommon.getToken(remoteFilename, lts, secretKey); //初始化secret_key
return httpHost + "/" + remoteFilename + "?token=" + token + "&ts=" + lts;
}
}
得到
http://192.168.56.10:8888/M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png?token=2fd428c6acc14126239e3a7d7d1d872b&ts=153
FastDFS防盗链的更多相关文章
- 实现fastdfs防盗链功能
目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...
- SpringBoot集成FastDFS+Nginx整合基于Token的防盗链
为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...
- JAVA防盗链在报表中的应用实例
今天我们来聊聊Java防盗链,多说无用,直接上应用案例. 这里所用的工具是报表软件FineReport,搭配有决策系统(一个web前端展示系统,主要用于权限控制),可以采用java防盗链的方式来实现页 ...
- nginx secure_link下载防盗链
下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷.flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效 ...
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- Code笔记 之:防盗链(图片)
图片防盗链 参考:http://bbs.csdn.net/topics/330080045 应该是”10种图片防盗的方法“,而不是”10种图片防盗链的方法“,不过看搜索防盗链的人要多一点,所 ...
- nginx配置图片防盗链
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 30d; access_log off; valid_referers none blocked ...
- php中防盗链使用.htaccess
下面开始讲解:比如你的图片都在img目录下,那就在该目录下放一个名为 .htaccess 的文件,内容如下: php代码: 以下为引用的内容:RewriteEngine onRewriteCond % ...
- 使用Apache的.htaccess就可以防盗链
Apache的.htaccess可以实现很多功能,如密码保护.禁止显示目录列表.阻止/允许特定的IP地址.实现网址的301 重定向等等.本文就来说说使用Apache的.htaccess如何防盗链. 当 ...
随机推荐
- 【JsonView工具】谷歌浏览器中安装JsonView扩展程序
接口测试过程中,有时候要查看接口返回的数据(比如Get接口),为了更方便的查看,发现这个插件挺好用的. 实际开发工作中经常用到json数据,那么就会有这样一个需求:在谷歌浏览器中访问URL地址返回的j ...
- 容器(docker)内运行Nginx
容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...
- es6 和 python 语法比较
http://www.linchaoqun.com/html/cms/content.jsp?id=1509528630774 Python3笔记:Python与ECMAScript部分语法对比 ht ...
- JeeWx全新版本发布!捷微二代微信活动平台1.0发布!活动插件持续开源更新!
JeeWx捷微二代微信活动平台 (专业微信营销活动平台,活动插件持续更新ing~) 终于等到你!还好我没放弃! 在团队持续多年的努力下,Jeewx微信管家和H5活动平台不断更新迭代,积累了许许多 ...
- ---mipi command
可惜这是5.1系统: http://www.cnblogs.com/lialong1st/p/8534728.html
- cmd命令行模式开启或关闭 windows功能 (转载)
1,用管理员身份运行cmd. 2,运行 dism /online /Get-Features >C:\1.txt,这样会在C盘生成一个txt文件,文件内容是功能列表,可以对照“打开或关闭win ...
- Must practice programming questions in all languages
To master any programming languages, you need to definitely solve/practice the below-listed problems ...
- 触摸事件,手势识别(UITouch,UIGestureRecognizer)
触摸发生时,UIWindow会有一个队列来存放所有的触摸事件,然后再把这些事件发送给对应的hit-test view,hit-test view会通过touch的四个函数来接收这些事件. 四个函数分别 ...
- JAVA_04
* a:局部代码块 * 在方法中出现:限定变量生命周期,及早释放,提高内存利用率 * b:构造代码块 (初始化块) * 在类中方法外出现:多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并 ...
- Vue note
1.npm run build 时,font:xx/xx "xxxx" 这种样式打包后会无效,只能写成font-size:xxx; line-height:xxx; font-fa ...