优秀的编程知识分享平台

网站首页 > 技术文章 正文

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

nanyue 2025-03-04 13:23:11 技术文章 9 ℃

今日分享

每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。

架构开源地址: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);
	}
最近发表
标签列表