java配置7.0.2版本minio的配置类使项目启动动态生成桶和桶的文件访问下载策略

137 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

1、引入minio最新maven依赖

<!--minio文件服务器maven坐标依赖-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>7.0.2</version>
</dependency>

2、nacos的yml文件配置minio的服务器、账号、密码、和动态生成最重要的桶的名称(唯一) #文件服务器服务地址和key-secret minio: endpoint: http://127.0.0.1:9000 accessKey: minio secretKey: minio bucketName: bucketTest

2、配置minio的配置类-设置minio readwrite(读写) 访问策略:bucketName动态可选我们自己的桶

@Data
@Configuration
public class MinioConfig {

    @Value("${minio.endpoint}")
    private String endpoint;

    @Value("${minio.accessKey}")
    private String accesskey;

    @Value("${minio.secretKey}")
    private String secretkey;

    @Value("${minio.bucketName}")
    private String bucketName;


    @Bean
    public MinioClient getMinioClient() throws Exception {
    
       #使用MinIO服务的URL,端口,Access keySecret key创建一个MinioClient对象
        MinioClient minioClient = new MinioClient(endpoint,accesskey,secretkey);
        //是否有该桶,没有则创建桶并设置桶的策略
        boolean flag = minioClient.bucketExists(bucketName);
        if(!flag){
            minioClient.makeBucket(bucketName);
        }
        //获取访问策略,如果访问策略为空,则设置-任何用户(Principal)-无条件的(Condition)-允许访问行为可进行(Effect)-读写-任何动作访问(Action)-所有资源文件(Resource)
        String bucketPolicy = minioClient.getBucketPolicy(bucketName);
        if(StringUtils.isEmpty(bucketPolicy)){
            //设置桶的策略
            minioClient.setBucketPolicy(bucketName,definedDefaultBucketPolicy(bucketName));
        }
        return minioClient;
    }

    /**
     * 获取默认桶策略
     * @param bucketName
     * @return
     */
    private String definedDefaultBucketPolicy(String bucketName){
        StringBuffer buffer=new StringBuffer();
        buffer.append("{" +
                ""Version":"2021-10-17"," +
                ""Statement":" +
                        "[" +
                            "{"Effect":"Allow"," +
                            ""Principal":{"AWS":["*"]}," +
                            ""Action":" +
                                        "["s3:ListBucket"," +
                                        ""s3:ListBucketMultipartUploads"," +
                                        ""s3:GetBucketLocation"]," +
                            ""Resource":["arn:aws:s3:::"+bucketName+""]}," +

                            "{"Effect":"Allow"," +
                            ""Principal":{"AWS":["*"]}," +
                            ""Action":" +
                                        "["s3:PutObject"," +
                                        ""s3:AbortMultipartUpload"," +
                                        ""s3:DeleteObject"," +
                                        ""s3:GetObject"," +
                                        ""s3:ListMultipartUploadParts"]," +
                            ""Resource":["arn:aws:s3:::"+bucketName+"/*"]}]}");
        return buffer.toString();
    }

}
参数说明
Version标识策略的版本号,Minio中一般为"2012-10-17"
Statement策略授权语句,描述策略的详细信息,包含Effect(效果)、Action(动作)、Principal(用户)、Resource(资源)和Condition(条件)。其中Condition为可选
EffectEffect(效果)作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。
ActionAction(动作)对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。例如 s3:GetObject ,表示获取对象
ResourceResource(资源)策略所作用的资源,支持通配符号 ,通配符号表示所有。在JSON视图中,不带Resource表示对所有资源生效。Resource支持以下字符:-_0-9a-zA-Z./\,如果Resource中包含不支持的字符,请采用通配符号 。例如:arn:aws:s3:::my-bucketname/myobject\,表示minio中my-bucketname/myobject目录下所有对象文件。
ConditionCondition(条件)您可以在创建自定义策略时,通过Condition元素来控制策略何时生效。Condition包括条件键和运算符,条件键表示策略语句的Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。

3、配置minio工具类--这里可以到其他大佬得到哦