abashev / vfs-s3

Amazon S3 driver for Apache commons-vfs (Virtual File System) project
Apache License 2.0
92 stars 50 forks source link

CachingFileProvider.findFileSystem never finds previously created file system if URI contains credentials #67

Closed vangogs closed 4 years ago

vangogs commented 4 years ago

CachingFileProvider.findFileSystem never finds previously created file system if URI contains credentials, because doCreateFileSystem adds additional option to FileSystemOptions which is used as key in search. doCreateFileSystem is called before adding FileSystem to cache.

    protected FileObject findFile(FileName name, FileSystemOptions fileSystemOptions) throws FileSystemException {
        FileSystem fs = findFileSystem(rootName, fileSystemOptions);
        if (fs == null) {
                    fs = doCreateFileSystem(rootName, fileSystemOptions);
                    addFileSystem(rootName, fs);
        }
    }
    protected FileSystem doCreateFileSystem( FileName fileName, FileSystemOptions fileSystemOptions ) throws FileSystemException {
        final S3FileName root = (S3FileName) fileName;
        final S3FileSystemOptions options = new S3FileSystemOptions(fileSystemOptions);

        if (root.hasCredentials()) {
            options.setCredentialsProvider(
                    new AWSStaticCredentialsProvider(new BasicAWSCredentials(root.getAccessKey(), root.getSecretKey()))
            );
        }

As the result new file system is added to map with different key than we was searching for

abashev commented 4 years ago

Fixed in 4.3.0