首页 > 其他分享 >FastDFS开启token防盗链

FastDFS开启token防盗链

时间:2023-09-03 15:23:46浏览次数:25  
标签:return String filepath FastDFS token path id 防盗链

  在实际的项目开发中,是不是迂到这样的问题,输入一个完的地址后,就显示出了相对应的图片。为了预防这类问题,所以使用到fdfs的token; 

 开启token后,在访问这个地址

 

 

一、修改fdfs的http.conf配置文件 

   cd /etc/fdfs/

   vi http.conf

## 开启token

 

# 服务器配置的秘钥

 http.anti_steal.secret_key=Fdfs@0903&!

二、pom.xml

<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>

三、工具类

import org.csource.common.MyException;
import org.csource.fastdfs.ProtoCommon;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;

public class FastDfsUtils {
/**
* 获取访问服务器的token,拼接到地址后面
*
* @param filepath 文件路径 group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
* @param httpSecretKey 密钥
* @return 返回token,如: token=078d370098b03e9020b82c829c205e1f&ts=1508141521
*/
public static String getToken(String filepath, String httpSecretKey) {
// unix seconds
int ts = (int) Instant.now().getEpochSecond();
// token
String token = "null";
try {
String path = getPath(filepath);
if(StringUtils.isEmpty(path)){
return null;
}
token = ProtoCommon.getToken(path, ts, httpSecretKey);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}

StringBuilder sb = new StringBuilder();
sb.append("token=").append(token);
sb.append("&ts=").append(ts);

return sb.toString();
}

public static String getPath(String filepath){
//截取下标
String sub = "/group1/";
int index = filepath.indexOf(sub);
if(index <= 0){
//地址为空,或地址不包含"/group1/"路径
return null;
}
// 截取字符串
String path = filepath.substring(index + sub.length());
// System.out.println(result); // 输出如:M00/00/0A/wKhDKWDnqD2Aa-qCAAFdD_Pw4vA622.jpg
return path;
}

public static String getUrlWithToken(String filepath, String httpSecretKey){
String token = getToken(filepath, httpSecretKey);
if(StringUtils.isEmpty(token)){
return null;
}
return filepath + "?" + token;
}

public static String getUrlWithoutToken(String urlWithToken){
//截取下标
String sub = "?token=";
int index = urlWithToken.indexOf(sub);
if(index <= 0){
return urlWithToken;
}
// 截取字符串
String path = urlWithToken.substring(0, index);
// System.out.println(path);
return path;
}

public static void main(String[] args) {
String url = "https://xxxxxx/group1/M00/00/0B/wKhDKWE1xpuAHx-hAAy2WlTKUp8445.jpg";
getUrlWithoutToken(url);
System.out.println(getUrlWithToken(url,"Fdfs@0903&!"));
}
}
四、业务层代码
@GetMapping("/info/{id}")
@ApiOperation(value = "根据作品id获取个人作品详细信息", notes = "根据作品id获取个人作品详细信息")
@ApiImplicitParam(name = "id", value = "作品id", required = true, dataType = "Long")
public Result<Object> entInfo(@PathVariable(value = "id") Long id) throws MalformedURLException {
 //根据Id到个人作品的具体信息,个人作品信息中有一个字段放到的是 https://xxxx/group1/M00/00/0B/wKhDKWE1xpuAHx-hAAy2WlTKUp8445.jpg,假如这个字段是url
personInfo info= person.getPersonInfoDetail(id);
info.setUrl(FastDfsUtils.getUrlWithToken(detail.getIdUrl,fdfsSecretKey));
System.out.print(info.setUrl()); 
//https://XXXX/group1/M00/00/0B/wKhDKWE1xpuAHx-hAAy2WlTKUp8445.jpg?token=cb2d9ee1a639b2e8f1f9776a3494b1ce&ts=1693723731
return Result.success(info);

}
五、校验

 

 


 

   

标签:return,String,filepath,FastDFS,token,path,id,防盗链
From: https://www.cnblogs.com/fwfjava/p/17674975.html

相关文章

  • smartbi token回调获取登录凭证漏洞(二)
    2023年8月8日Smartbi官方又修复了一处权限绕过漏洞。该漏洞是上一个特定场景下设置Token回调地址漏洞的绕过,未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。于是研究了下相关补丁并进行分析。0x01分析过程阅读相关补丁,可知此次漏洞与/smartbix/api/monitor/set......
  • Node.js 服务端如何实现图片防盗链 All In One
    Node.js服务端如何实现图片防盗链AllInOne无扩图片展名URLblobURL一次性链接设置有效期链接禁用缓存ReferrerPolicy,referer禁用IframeCORS白名单动态生成的blob链接,过一段时间后,刷新页面回自动失效......
  • App开放接口API安全性—Token签名sign的设计与实现
    在app开放接口API的设计中,避免不了的就是安全性问题。 一、https协议对于一些敏感的API接口,需要使用https协议。https是在http超文本传输协议加入SSL层,它在网络间通信是加密的,所以需要加密证书。 二、签名设计原理:用户登录后向服务器提供用户认证信息(如账户和密码),服务器认证完后......
  • Python+Flask接口实现简单的ToKen功能
    话不多说,上代码fromflaskimportrequest,jsonifyfromfunctoolsimportwrapsclassTokenRequired:@classmethoddeftoken_required(cls,f):@wraps(f)defdecorated_function(*args,**kwargs):#获取请求头部中的key字段......
  • 如何通过PKCE拿到AccessToken?
    PKCE(ProofKeyforCodeExchange)是一种用于增强OAuth2.0授权流程安全性的技术,特别适用于公共客户端(如移动应用)的场景。它通过在授权请求中引入一个随机生成的CodeVerifier和一个对应的CodeChallenge,以及在交换令牌时验证这些值,从而增加了授权流程的安全性。以下是在OAuth2.0......
  • session,cookie 和 token 三个概念的区别和联系
    Session(会话):"Session"是一种服务器端的状态管理机制,用于跟踪和存储用户在Web应用程序中的状态信息。当用户访问应用程序时,服务器会为每个会话分配一个唯一的会话ID。这个会话ID通常通过"cookie"或URL参数在用户的浏览器和服务器之间进行传递。会话数据存储在服务器上,可以包含用户......
  • Authorization token types All In One
    AuthorizationtokentypesAllInOneAccesstokensIDtokensSelf-signedJWTsRefreshtokensFederatedtokensBearertokens令牌类型访问令牌ID令牌自签名JWT刷新令牌联合令牌不记名令牌本文不讨论API密钥或客户端ID,这些被视为凭据。OAuthOAuth2.0......
  • localstorage本地存储及token,vuex刷新数据丢失问题⚡⚡⚡
    1.vuex和axios安装,引入,使用1.1vuexa安装和使用vuex3.x版本的官网安装教程:安装|Vuexvuex4.x版本的官网安装教程:安装|Vuexnpminstallvuex--save2.在src下新建文件夹store,并在文件夹中新建文件index.js,如下:importVuexfrom'vuex'//引入user模块化modules......
  • pd.read_csv pandas.errors.ParserError: Error tokenizing data. C error: Expected
    df1=pd.read_csv(path1,encoding="utf-8",chunksize=50000,error_bad_lines=False)尽管提示:Warning(fromwarningsmodule):File"D:\Python37\lib\idlelib\run.py",line550exec(code,self.locals)FutureWarning:Theerror_bad_linesargu......
  • Cookie、Session及Token详解
    CookieCookie,有时也用其复数形式Cookies,类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息以加入购物车为例,每次浏览器请求后server都会将本次商品id存储在Cookie中......