Java实现Minio桶存储配额等一系列权限配置

        Minio JavaAPI没有实现相关桶的一系列权限配置,所以自行研发了一套

        任何问题可以评论及私信我,公共代码下载资源列表下载或者评论及私信我

        Minio实现创建桶、桶存储配置(存储大小、生命周期)、策略配置、用户权限配置,获取桶已使用存储空间及配置总存储空间。

1.需要传的参数封装为实体类

package com.chinaunicom.system.saas.entity;

import lombok.Data;
import org.springframework.stereotype.Component;

@Data
@Component
public class MinioProperties {
    //网址
    private String endpoint;
    //超级用户
    private String accessKey;
    //超级用户密码
    private String secretKey;
    //桶名称
    private String bucketName;
    //桶大小
    private long size;
    //桶用户
    private String userAccessKey;
    //桶密码
    private String userSecretKey;
    //桶用户状态
    private String status;
    //桶策略名称
    private String policyName;
    //桶策略
    private String policy;
    private boolean isGroup;


}

2.MInio接口实现 MinioTemplateService 

package com.chinaunicom.system.service;

import com.chinaunicom.system.entity.MinioProperties;
import org.springframework.stereotype.Component;

/**
 * renhuifeng
 * 桶配置接口
 */
@Component
public interface MinioTemplateService {


    /**
     * 初始化
     * @param minioProperties
     */
    public  void init(MinioProperties minioProperties);

    /**
     * 1.创建bucket
     */
    public  void createBucket(MinioProperties minioProperties) throws Exception;

    /**
     * 2.存储配额
     * @throws Exception
     */

    public  void setBucketQuota(MinioProperties minioProperties) throws Exception;

    /**
     * 3.配置生命周期
     * @throws Exception
     */
   /* public  void setBucketExpirationByDays(MinioProperties minioProperties) throws Exception;
*/
    /**
     * 4.添加用户
     * @throws Exception
     */

    public  void addUser(MinioProperties minioProperties) throws Exception;

    /**
     * 5.添加策略配置
     * @throws Exception
     */
    public  void addCannedPolicy(MinioProperties minioProperties) throws Exception;

    /**
     * 6.用户添加策略配置
     *
     * @throws Exception
     */
    public  void setPolicy(MinioProperties minioProperties) throws Exception;

    /**
     * 获取桶信息
     * @throws Exception
     */
    public long getBucketQuota(MinioProperties minioProperties) throws Exception;

    /**
     * 总配置
     * @param minioProperties
     * @throws Exception
     */
    public void  minioConfig(MinioProperties minioProperties) throws Exception;

    /**
     * 获取桶所有对象
     * @param minioProperties
     * @return
     * @throws Exception
     */
    public long  listObjects(MinioProperties minioProperties) throws Exception;
}

3.接口实现类 MinioTemplateServiceImpl 

package com.chinaunicom.system.service.impl;


import com.chinaunicom.system.common.CommException;
import com.chinaunicom.system.common.MinioAdminClient;
import com.chinaunicom.system.common.QuotaUnit;
import com.chinaunicom.system.common.UserInfo;
import com.chinaunicom.system.entity.MinioProperties;
import com.chinaunicom.system.service.MinioTemplateService;
import io.minio.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;

/**
 * renhuifeng
 * 同配置实现类
 */
@Slf4j
public class MinioTemplateServiceImpl implements MinioTemplateService {


    private MinioClient minioClient;
    private MinioAdminClient minioAdminClient;
    @Override
    public  void init(MinioProperties minioProperties) {
        minioClient = MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
        minioAdminClient = MinioAdminClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();


    }
    /**
     * 1.创建bucket
     */
    @Override
    public  void createBucket(MinioProperties minioProperties) throws Exception {
        // 检查存储桶是否已经存在
        boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
        if (isExist) {
            log.debug("Bucket already exists.");
        } else {
            //1.创建桶
            String methodName = "createBucket()";
            long startTime = System.currentTimeMillis();
            try {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
            } catch (Exception e) {
                CommException.handleException(methodName, null, startTime, e);
            }
        }
    }

    /**
     * 2.存储配额
     * @throws Exception
     */
    @Override
    public  void setBucketQuota(MinioProperties minioProperties) throws Exception {


        //2.存储配额

        String methodName = "setBucketQuota()";
        long startTime = System.currentTimeMillis();
        try {
            minioAdminClient.setBucketQuota(minioProperties.getBucketName(), minioProperties.getSize(), QuotaUnit.KB);
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }

    }

    /**
     * 3.配置生命周期
     *//*
    @Override
    public  void setBucketExpirationByDays(MinioProperties minioProperties) throws Exception {

        List<LifecycleRule> rules = new LinkedList<>();

        // 配置生命周期规则
        rules.add(
                new LifecycleRule(
                        Status.ENABLED, // 开启状态
                        null,
                        new Expiration((ZonedDateTime) null, minioProperties.getDays(), null), // 保存365天
                        new RuleFilter(minioProperties.getPrefix()), // 目录配置
                        minioProperties.getRuleName(),
                        null,
                        null,
                        null)
        );
        LifecycleConfiguration lifecycleConfigurationNew = new LifecycleConfiguration(rules);
        // 添加生命周期配置
        String methodName = "setBucketExpirationByDays()";
        long startTime = System.currentTimeMillis();
        try {
            minioClient.setBucketLifecycle(
                    SetBucketLifecycleArgs
                            .builder()
                            .bucket(minioProperties.getBucketName())
                            .config(lifecycleConfigurationNew)
                            .build()
            );

        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }
    }*/

    /**
     * 4.添加用户
     * @throws Exception
     */
    @Override
    public  void addUser(MinioProperties minioProperties) throws Exception {


        //添加用户

        String methodName = "addUser()";
        long startTime = System.currentTimeMillis();
        try {
            minioAdminClient.addUser(minioProperties.getUserAccessKey(),
                    UserInfo.Status.valueOf(minioProperties.getStatus()), minioProperties.getUserSecretKey(),
                    null, null);
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }

    }

    /**
     * 5.添加策略配置
     * @throws Exception
     */
    @Override
    public  void addCannedPolicy(MinioProperties minioProperties) throws Exception {
        //添加策略配置
        String methodName = "addCannedPolicy()";
        long startTime = System.currentTimeMillis();
        try {
            minioAdminClient.addCannedPolicy(minioProperties.getPolicyName(), minioProperties.getPolicy().replaceAll("'", "\""));
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }

    }

    /**
     * 6.用户添加策略配置
     *
     * @throws Exception
     */
    @Override
    public  void setPolicy(MinioProperties minioProperties) throws Exception {
        //添加策略配置
        String methodName = "setPolicy()";
        long startTime = System.currentTimeMillis();
        try {
            minioAdminClient.setPolicy(minioProperties.getUserAccessKey(), minioProperties.isGroup(), minioProperties.getPolicyName());
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }

    }

    /**
     * 获取桶信息
     * @throws Exception
     */
    @Override
    public long getBucketQuota(MinioProperties minioProperties) throws Exception {
        //添加策略配置
        String methodName = "getBucketQuota()";
        long startTime = System.currentTimeMillis();
        long bucketQuota = 0;
        try {
            bucketQuota = minioAdminClient.getBucketQuota(minioProperties.getBucketName());
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }
        return   bucketQuota;
    }

    /**
     * 桶一系列操作
     * @param minioProperties
     * @throws Exception
     */
    @Override
    public void minioConfig(MinioProperties minioProperties) throws Exception {
        init(minioProperties);
        createBucket(minioProperties);
        setBucketQuota(minioProperties);
        //去掉配置生命周期
        //setBucketExpirationByDays(minioProperties);
        addUser(minioProperties);
        addCannedPolicy(minioProperties);
        setPolicy(minioProperties);
    }

    /**
     * 获取桶已使用内存
     * @throws Exception
     */
    @Override
    public long listObjects(MinioProperties minioProperties) throws Exception {
        init(minioProperties);
        String methodName = "listObjects()";
        long startTime = System.currentTimeMillis();

        long size = 0;

        try {
            Iterable<Result<Item>> results =
                    minioClient.listObjects(ListObjectsArgs.builder().bucket(minioProperties.getBucketName()).build());
            for (Result<Item> result : results) {
                Item item = result.get();
                size +=item.size();
            }
        } catch (Exception e) {
            CommException.handleException(methodName, null, startTime, e);
        }
        return   size;
    }

}

公共代码段请下载

 Minio桶一系列权限配置-Java文档类资源-CSDN文库

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Minio是一个开源的对象存储项目,它提供了S3兼容的API接口,可以搭建私有云存储服务。在使用Minio时,我们需要对Minio进行一系列权限配置。 首先,我们需要创建一个,并设置的访问权限的访问权限有三种:公共读写、私有读写和公共读私有写。公共读写意味着任何人都可以访问和修改中的对象;私有读写意味着只有拥有者拥有访问和修改中的对象的权限;公共读私有写意味着所有人都可以访问中的对象,但只有拥有者有权修改中的对象。 其次,我们需要为中的对象设置访问权限。对象的访问权限有四种:私有、公共读、公共读写和限制访问。私有意味着只有拥有者可以访问和修改对象;公共读意味着所有人都可以访问对象,但只有拥有者有权修改对象;公共读写意味着所有人都可以访问和修改对象;限制访问可以通过预签名URL、策略或条件指定等方式来限制对象的访问权限。 最后,我们需要为每个请求定义合适的策略,并使用用户、群组或IAM角色进行授权。可以为不同的用户、群组或IAM角色定义不同的权限,以控制他们能够访问和修改的对象及其操作。 总之,Minio权限配置是一个细致而繁琐的过程,需要根据实际业务需求和安全性要求进行设置。只有合理设置权限,才能保障数据的安全和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任错错

如果对您有帮助我很开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值