之前介绍 过 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/1vTUr3fE4KCKWbWGy2L6gNQ
提取码:2zdr