当前位置: 首页 > 知识库问答 >
问题:

Apache Camel检查目录读取权限(AWS环境)

须曜文
2023-03-14

我有一个用于验证FTP目录的API,如下所示:

public boolean validateDirectory(FtpLocation ftpLocation) throws CustomException{
    FTPClient client = new FTPClient();
    try {
        client.connect(ftpLocation.getSystem(), Integer.parseInt(ftpLocation.getPort()));
        client.login(ftpLocation.getUser(), ftpLocation.getPassword());
        client.changeWorkingDirectory(ftpLocation.getDirPath());
        int returnCode = client.getReplyCode();
        if (returnCode == 550) {
            LOG.error("Directory ["+ ftpLocation.getDirPath() + "] does not exist");
            return false;
        }           
        File dir = new File(ftpLocation.getDirPath());
        if(dir!=null){
            if (!dir.canRead()) {
                LOG.error("Directory ["+ ftpLocation.getDirPath() + "] does not have read permission");
                return false;
            }
        }
        return true;
    } catch (NumberFormatException | IOException e) {
        LOG.error("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
        throw new CustomException("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
    } finally {
        try {
            client.disconnect();
        } catch (IOException e) {
            LOG.warn("Error occured while disconnecting FTPClient", e);
        }
    }   
}
    null
07:41:59.799 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not have read permission

07:42:48.801 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not have read permission

07:43:27.093 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not exist

07:44:00.215 [pool-2-thread-1] ERROR c.n.d.m.b.f.Validator - Directory [/source] does not exist
  1. 是否有其他方法可以解决1的问题,成功地路由源文件?
  2. 如何验证目录以检查读取权限?

注:骆驼版本为2.12.1

共有1个答案

越嘉茂
2023-03-14

我找到了解决问题的方法,如下所示:

public void validateDirectory(FtpLocation ftpLocation) throws CustomException {
    FTPClient client = new FTPClient();
    try {
        client.connect(ftpLocation.getSystem(), Integer.parseInt(ftpLocation.getPort()));
        client.login(ftpLocation.getUser(), ftpLocation.getPassword());
        client.enterLocalPassiveMode();
        client.changeWorkingDirectory(ftpLocation.getDirPath());
        int returnCode = client.getReplyCode();
        LOG.debug("FTP return code: "+ returnCode);
        if (returnCode == 550) {
            LOG.error("Directory ["+ ftpLocation.getDirPath() + "] does not exist");
            throw new CustomException("Directory ["+ ftpLocation.getDirPath() + "] does not exist");
        }
        String targetDir = client.printWorkingDirectory();
        client.cdup();
        targetDir = StringUtils.substring(targetDir, StringUtils.lastIndexOf(targetDir, File.separator) + 1);
        FTPFile ftpFiles[] = client.listFiles();
        for(FTPFile ftpFile : ftpFiles){
            if(StringUtils.equals(ftpFile.getName(), targetDir) && !ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)){
                LOG.error("No read permission for directory [" + ftpLocation.getDirPath() + "]");
                throw new CustomException("No read permission for directory [" + ftpLocation.getDirPath() + "]");
            }
        }
    } catch (NumberFormatException | IOException e) {
        LOG.error("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
        throw new CustomException("Failed to validate Source Directory Path [" + ftpLocation.getDirPath() + "]", e);
    } finally {
        try {
            client.disconnect();
        } catch (IOException e) {
            LOG.warn("Error occured while disconnecting FTPClient", e);
        }
    }   
}

然而,如果你有更好的解决方案,那么请张贴它。

 类似资料:
  • 本文向大家介绍如何使用Python检查目录的权限?,包括了如何使用Python检查目录的权限?的使用技巧和注意事项,需要的朋友参考一下 您可以使用os.access(path,mode)来检查目录权限以及读取,写入和执行权限的模式。为了能够写,您还需要检查执行权限。例如, 您还可以遵循一个通用的Python习惯用法:寻求宽容比获得许可要容易。按照该习惯用法,您应该尝试写入有问题的目录,如果没有权限

  • 此代码用于测试应用程序是否具有权限,如果您具有权限,则返回true,否则返回false。 错误: PID:25504 java.lang.NullPointerException:试图在Android.Content.Context Android.Content.Content.Context.GetApplicationContext(view.java:21147)在Android.os.h

  • cmf_auth_check($userId, $name = null, $relation = 'or') 功能 检查用户权限 参数 $userId: int 要检查权限的用户 ID $name: string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $relation:string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有

  • 创建目录权限 如果你想创建一个目录并授予777权限,你需要怎么做?查看Go的API文档我们可以这样写。 源文件为mkdir.go。 package main import ( "fmt" "os" ) func main() { err := os.MkdirAll("/tmp/gotest/", 0777) if err != nil { panic(er

  • 问题内容: 我的小型实用程序应用程序通过GUI文件选择器要求用户提供输出目录。然后,经过一些处理,它会在此输出目录中创建很多文件。 我需要检查应用程序是否具有写访问权,以便它通知用户并且不继续进行处理(这可能需要很长时间) 我的第一次尝试是 java.io.File* 的 canWrite() 方法。但这是行不通的,因为它处理目录条目本身而不是其内容。我已经看到Windows XP文件夹的至少一个

  • 读取目录 读取目录 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:读取目录 * * 程序会创建一个操作文件的函数并导出到msh命令列表 * 在函数