FastDFS 笔记(4)—— 防盗链

FastDFS 学习(4)—— 防盗链

设置

编辑文件:

1
sudo vim /etc/fdfs/http.conf

修改如下:

1
2
3
4
5
6
# 是否启用密钥访问
http.anti_steal.check_token = true
# 访问密钥
http.anti_steal.secret_key = FastDFS1234567890
# 错误密钥访问返回的文件
http.anti_steal.token_check_fail = /home/bolitao/图片/error.jpg

之后重启 nginx:

1
systemctl restart nginx

测试

使用一张已上传的图片:group1/M00/00/00/wKhPg2BO-gGAeSHoAAMQ7sedL08620.jpg

开启防盗链前可以直接访问:

开启防盗链后,使用原地址访问文件,Nginx 返回 400:

使用错误的 token (http://192.168.79.131:8888/group1/M00/00/00/wKhPg2BO-gGAeSHoAAMQ7sedL08620.jpg?token=123&ts=1614571854) 进行访问:

通过 java client 获取正确的访问地址:

1
2
3
4
5
6
7
8
@Test
void testAntiSteal() throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException {
  int ts = (int) (System.currentTimeMillis() / 1000 + 900);
  String remoteFilename = "M00/00/00/wKhPg2BO-gGAeSHoAAMQ7sedL08620.jpg";
  String fastDfsUrl = "http://192.168.79.131:8888/";
  String token = ProtoCommon.getToken(remoteFilename, ts, "bolitao");
  System.out.println(fastDfsUrl + "group1/" + remoteFilename + "?token=" + token + "&ts=" + ts);
}

注意: ProtoCommon.getToken() 的第一个参数中,文件名不加 groupx

使用生成的 token 和时间戳进行访问,可发现访问成功:

加载评论