MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kesalahan otentikasi saat mengakses mongodb melalui aplikasi Spring Boot

Saya menemukan masalahnya. Untuk kelengkapan thread ini, saya akan share jawabannya, termasuk kodenya. Soalnya saya salah menggunakan property application spring.data.mongodb.uri :tidak ada username dan password di URI, karena saya salah percaya bahwa spring.data.mongodb.username dan spring.data.mongodb.password menutupi itu. Jadi, gunakan uri dengan nama pengguna dan kata sandi, atau gunakan properti pegas host dan database (dan mungkin juga port) secara eksplisit. Ini kodenya. Ini akan bekerja di aplikasi boot musim semi dengan dukungan mongoDB (gunakan initializr atau IntelliJ untuk membuat proyek itu). Saya punya model:

package net.IndyStef.model;

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

@Document(collection = "person")
public class Person {

@Id
private String id;

private String name;
private Integer age;

public Person() {
}

public Person(String id) {
    this.id = id;
}

public Person(String id, String name, Integer age) {
    this.id = id;
    this.name = name;
    this.age = age;
}

... getters/setters omitted for breverity ...
}

Data dibaca dan ditulis melalui repositori:

package net.IndyStef.repository;

import net.okrongli.model.Person;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * Created by IndyStef on 23/08/16.
 */
public interface PersonRepository extends MongoRepository<Person, String> {
}

Nama database, host, dan kredensial ada di file application.properties:

spring.data.mongodb.host=192.168.1.90
spring.data.mongodb.database=people
spring.data.mongodb.username=user
spring.data.mongodb.password=password
#spring.data.mongodb.uri=mongodb://192.168.1.90/people

Penting adalah untuk tidak mencampur uri dengan database dan username. Jika Anda menggunakan uri, itu harus menyertakan nama pengguna dan kata sandi, seperti ini:

spring.data.mongodb.uri=mongodb://user:[email protected]/people

Untuk menguji ini, saya menggunakan pelari baris perintah Spring sederhana:

package net.IndyStef;

import net.IndyStef.model.Person;
import net.IndyStef.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;

@SpringBootApplication
public class MongoDbTestApplication implements CommandLineRunner {

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

    @Autowired
    private PersonRepository repository;

    @Override
    public void run(String... args) {

        repository.save(new Person("peter.pan", "Peter Pan", 865));

        List<Person> people = repository.findAll();

        for (Person person: people) {
            System.out.println(person);
        }
    }
}

Saya harap penjelasan ini membantu orang lain yang tidak dapat memahaminya, seperti saya selama beberapa hari.

Terima kasih,

Stefan



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengoptimalkan kueri MongoDB dengan $gt dan $lte?

  2. Cara paging yang efisien dengan MongoDB dan ASP.NET MVC

  3. connect bukan fungsi saat menghubungkan ke mongodb

  4. Ubah kueri MongoDB menjadi sintaks Spring MongoDB

  5. Driver MongoDB C#, kueri oleh elemen array menggunakan regex