ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

springboot mongodb 账号密码认证连接 源码demo

2019-07-31 21:09:45  阅读:663  来源: 互联网

标签:springboot mongodb springframework 源码 import org public String


之前介绍 过 springboot mongodb无认证连接 + 连接池 源码demo
实际项目中肯定是会有认证的,下面介绍 springboot mongodb 账号密码认证连接 源码demo
下一章介绍 在本章基础上增加 连接池配置

testdb数据库的集合user测试数据

在user集合添加一条数据用于测试

db.createCollection('user')

db.user.insert({
    account: '110',
    password: '123456',
    phone: '188xxxxxxxx',
    name: 'zhangsan'
})

在这里插入图片描述

测试源码demo

目录结构
在这里插入图片描述
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>mongodb_password_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mongodb_password_demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

server.port=8093

#第一个数据库
#注:配置根据自己实际情况更改
spring.data.mongodb.testdb.addresses=ip:port
#认证的数据库账号
spring.data.mongodb.testdb.credentialdatabase=admin
spring.data.mongodb.testdb.credentialusername=root
spring.data.mongodb.testdb.credentialpassword=123456
#连接的数据库
spring.data.mongodb.testdb.database=testdb

TestdbMongoConfiguration

package com.example.mongodb_password_demo.config;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

import java.util.ArrayList;
import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.testdb")
public class TestdbMongoConfiguration {
    // MongoDB Properties

    private ArrayList<String> addresses;
    private String credentialdatabase, credentialusername, credentialpassword, database;

    public ArrayList<String> getAddresses() {
        return addresses;
    }
    public void setAddresses(ArrayList<String> addresses) {
        this.addresses = addresses;
    }
    public String getCredentialdatabase() {
        return credentialdatabase;
    }
    public void setCredentialdatabase(String credentialdatabase) {
        this.credentialdatabase = credentialdatabase;
    }
    public String getCredentialusername() {
        return credentialusername;
    }
    public void setCredentialusername(String credentialusername) {
        this.credentialusername = credentialusername;
    }
    public String getCredentialpassword() {
        return credentialpassword;
    }
    public void setCredentialpassword(String credentialpassword) {
        this.credentialpassword = credentialpassword;
    }
    public String getDatabase() {
        return database;
    }
    public void setDatabase(String database) {
        this.database = database;
    }

    /**
     * 覆盖容器中默认的MongoDbFacotry Bean
     */
    public MongoDbFactory mongoDbFactory() {
        // MongoDB地址列表
        List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
        for (String address : addresses) {
            String[] hostAndPort = address.split(":");
            String host = hostAndPort[0];
            Integer port = Integer.parseInt(hostAndPort[1]);
            ServerAddress serverAddress = new ServerAddress(host, port);
            serverAddresses.add(serverAddress);
        }

        List<MongoCredential> mongoCredentialList = new ArrayList<>();
        //添加了一个密码认证用户到认证数组中: 认证数据库admin里的root用户(这里只是为了简单,认证root用户 权限够)
        mongoCredentialList.add(MongoCredential.createCredential(credentialusername, credentialdatabase, credentialpassword.toCharArray()));
        //创建认证客户端
        MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredentialList);
        //创建连接要操作数据库的工厂
        return new SimpleMongoDbFactory(mongoClient, database);
    }

    //第一个数据库 默认作为主数据库 需要添加注解 @Primary ,后面的数据库不需要这个注解
    @Primary
    @Bean(name = "testdbMongoTemplate")
    public  MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

User

package com.example.mongodb_password_demo.pojo;

import org.springframework.data.mongodb.core.mapping.Document;

//user 是mongodb数据库中集合名
@Document(collection="user")
public class User {
    private String account;
    private String password;
    private String name;
    private String phone;

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "account='" + account + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

TestController

package com.example.mongodb_password_demo.controller;

import com.example.mongodb_password_demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    @Qualifier(value = "testdbMongoTemplate")
    protected MongoTemplate testdbMongoTemplate;

    @RequestMapping("/test")
    public String test(){
        Query query = new Query();
        query.addCriteria(Criteria.where("name").is("zhangsan"));
        User user = testdbMongoTemplate.findOne(query, User.class);
        if(user == null){
            return "user null";
        }
        return user.toString();
    }
}

启动类 MongodbPasswordDemoApplication

package com.example.mongodb_password_demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MongodbPasswordDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MongodbPasswordDemoApplication.class, args);
    }

}

测试

浏览器输入: 127.0.0.1:8093/test
在这里插入图片描述

源码

链接:https://pan.baidu.com/s/1kIInd60Gnl2W6aw2U9yhPw
提取码:fd18

下一篇:在此基础上增加 连接池配置

标签:springboot,mongodb,springframework,源码,import,org,public,String
来源: https://blog.csdn.net/a704397849/article/details/97954984

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有