Java新增Yapi用户

我们部署Yapi一般都要吧注册功能禁用掉,但是怎么添加用户呢,下边我们实现一个简单的使用Java修改Mongo数据添加用户,直接上代码

pom.xml 添加如下依赖

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.8.2</version>
        </dependency>

Java编写测试类

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument;
import org.apache.commons.codec.digest.DigestUtils;
import org.bson.Document;

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Updates.inc;

/**
 * 功能描述 : Yapi一键注册用户方法
 *
 * @author Ziyear 2022-01-18 11:04
 */
public class YapiRegUser {
    /**
     * 默认密码
     */
    private static final String DEFAULT_PASSWORD = "Yapi1234";

    /**
     * yapi Database
     */
    private static final MongoDatabase YAPI_DB;

    /*
     * 初始化mongo
     */
    static {
        System.out.println("===============MongoDBUtil初始化========================");
        MongoClient mongoClient = new MongoClient("192.168.50.254", 27017);
        // 大部分用户使用mongodb都在安全内网下,但如果将mongodb设为安全验证模式,就需要在客户端提供用户名和密码:
        // boolean auth = db.authenticate(myUserName, myPassword);
        MongoClientOptions.Builder options = new MongoClientOptions.Builder();
        options.cursorFinalizerEnabled(true);
        // options.autoConnectRetry(true);// 自动重连true
        // options.maxAutoConnectRetryTime(10); // the maximum auto connect retry time
        options.connectionsPerHost(300);// 连接池设置为300个连接,默认为100
        options.connectTimeout(30000);// 连接超时,推荐>3000毫秒
        options.maxWaitTime(5000); //
        options.socketTimeout(0);// 套接字超时时间,0无限制
        options.threadsAllowedToBlockForConnectionMultiplier(5000);// 线程队列数,如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。
        options.writeConcern(WriteConcern.SAFE);//
        options.build();

        YAPI_DB = mongoClient.getDatabase("yapi");
    }

    public static void main(String[] args) {
        initPassword("user@admin.com");
    }

    /**
     * 功能描述 : 创建用户
     *
     * @param email
     */
    private static void register(String email) {
        MongoCollection<Document> user = YAPI_DB.getCollection("user");
        Document exist = findExist(user, email);
        if (exist != null) {
            throw new RuntimeException("邮箱已存在!");
        }
        String passsalt = randomStr();
        String sPassword = DigestUtils.sha1Hex(DEFAULT_PASSWORD + DigestUtils.sha1Hex(passsalt));
        String username = email.substring(0, email.indexOf('@'));

        Document insert = new Document();
        insert.put("_id", getNextId());
        insert.put("__v", 0);
        insert.put("username", username);
        insert.put("password", sPassword);
        insert.put("email", email);
        insert.put("passsalt", passsalt);
        insert.put("role", "member");
        insert.put("add_time", getDate());
        insert.put("up_time", getDate());
        insert.put("study", true);
        insert.put("type", "site");
        user.insertOne(insert);
    }

    /**
     * 功能描述 : 删除用户
     *
     * @param email
     */
    private static void delByEmail(String email) {
        YAPI_DB.getCollection("user").deleteOne(eq("email", email));
    }

    /**
     * 功能描述 : 初始化密码
     *
     * @param email
     */
    private static void initPassword(String email) {
        MongoCollection<Document> user = YAPI_DB.getCollection("user");
        Document exist = findExist(user, email);
        if (exist == null) {
            throw new RuntimeException("用户不存在!");
        }

        String passsalt = randomStr();
        String sPassword = DigestUtils.sha1Hex(DEFAULT_PASSWORD + DigestUtils.sha1Hex(passsalt));
        Document update = new Document();
        update.put("passsalt", passsalt);
        update.put("password", sPassword);
        update.put("up_time", getDate());
        user.updateOne(eq("email", email), new Document("$set", update));
    }

    /**
     * 功能描述 : 查询存在的用户
     *
     * @return {@link Document}
     */
    private static Document findExist(MongoCollection<Document> user, String email) {
        MongoCursor<Document> iterator = user.find(eq("email", email)).iterator();
        if (iterator.hasNext()) {
            return iterator.next();
        }
        return null;
    }

    /**
     * 功能描述 : 获取随机盐
     *
     * @return {@link int}
     */
    private static String randomStr() {
        return Long.toString(Double.doubleToLongBits(Math.random()), 36).substring(2);
    }

    /**
     * 功能描述 : 获取时间戳
     *
     * @return {@link int}
     */
    public static int getDate() {
        return (int) (System.currentTimeMillis() / 1000);
    }

    /**
     * 获取下一个自增ID
     *
     * @return 序列值
     */
    private static Integer getNextId() {
        MongoCollection<Document> seqColl = YAPI_DB.getCollection("identitycounters");

        Document query = new Document();
        query.put("model", "user");
        query.put("field", "_id");

        FindOneAndUpdateOptions options = new FindOneAndUpdateOptions();
        options.upsert(true);
        options.returnDocument(ReturnDocument.AFTER);
        Document andUpdate = seqColl.findOneAndUpdate(query, inc("count", 1), options);
        assert andUpdate != null;
        return andUpdate.getInteger("count");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值