设置
编辑文件:
sudo vim /etc/fdfs/http.conf
修改如下:
# 是否启用密钥访问
http.anti_steal.check_token = true
# 访问密钥
http.anti_steal.secret_key = FastDFS1234567890
# 错误密钥访问返回的文件
http.anti_steal.token_check_fail = /home/bolitao/图片/error.jpg
之后重启 nginx:
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 获取正确的访问地址:
@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 和时间戳进行访问,可发现访问成功: