今日分享
每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。
架构开源地址:https://gitee.com/msxy
springboot整合Ftpserver
参考上篇文章:Springboot整合Apache Ftpserver实现文件服务器源码搭建(二)
拓展功能一(密码验证器)
用户密码验证
https://github.com/patrickfav/bcrypt
默认配置中,我们使用的用户密码是明文加密模式。
# 明文
dbUserManagerFactory.setPasswordEncryptor(new ClearTextPasswordEncryptor());
# Md5
dbUserManagerFactory.setPasswordEncryptor(new Md5PasswordEncryptor());
# 自定义Hash
dbUserManagerFactory.setPasswordEncryptor(new MyPasswordEncryptor());
自定义MyPasswordEncryptor加密器
增加bcrypt依赖
at.favre.lib
bcrypt
0.9.0
新建MyPasswordEncryptor类
package com.qingfeng.ftpserver.config;
/**
* @author Administrator
* @version 1.0.0
* @ProjectName finder-module-ftpserver
* @Description TODO
* @createTime 2022年04月21日 09:34:00
*/
import at.favre.lib.crypto.bcrypt.BCrypt;
import org.apache.ftpserver.usermanager.PasswordEncryptor;
import java.security.NoSuchAlgorithmException;
public class MyPasswordEncryptor implements PasswordEncryptor {
public MyPasswordEncryptor() {
}
public String encrypt(String password) {
String bcryptString = BCrypt.with(BCrypt.Version.VERSION_2Y).hashToString(10, password.toCharArray());
System.out.println(bcryptString);
return bcryptString;
}
public boolean matches(String passwordToCheck, String storedPassword) {
System.out.println("--------------matches-------------");
System.out.println(passwordToCheck);
System.out.println(storedPassword);
if (storedPassword == null) {
throw new NullPointerException("storedPassword can not be null");
} else if (passwordToCheck == null) {
throw new NullPointerException("passwordToCheck can not be null");
} else {
BCrypt.Result result = BCrypt.verifyer().verify(passwordToCheck.toCharArray(), storedPassword);
// return this.encrypt(passwordToCheck).equalsIgnoreCase(storedPassword);
return result.verified;
}
}
public static void main(String[] args) throws NoSuchAlgorithmException {
String bcryptString = BCrypt.with(BCrypt.Version.VERSION_2Y).hashToString(10, "123456".toCharArray());
System.out.println(bcryptString);
}
}
拓展功能二(文件类型验证)
@Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
// 获取上传文件的上传路径
String path = session.getUser().getHomeDirectory();
//校验文件夹路径是否存在
viladateDir(path);
// 获取上传用户
String name = session.getUser().getName();
// 获取上传文件名
String filename = request.getArgument();
logger.info("用户:'{}',上传文件到目录:'{}',文件名称为:'{},状态:开始上传~'", name, path, filename);
System.out.println("用户:'" + name + "',上传文件到目录:'" + path + "',文件名称为:'" + filename + "',状态:开始上传~");
session.write(new DefaultFtpReply(550, "附件格式不正确!"));
return super.onUploadStart(session, request);
}