MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Authentifizierungsfehler beim Zugriff auf mongodb über die Spring Boot-App

Ich habe das Problem gefunden. Zur Vollständigkeit dieses Threads teile ich die Antwort, einschließlich des Codes. Das Problem war, dass ich die Anwendungseigenschaft spring.data.mongodb.uri falsch verwendet habe:Es hatte nicht den Benutzernamen und das Passwort in der URI, weil ich mich irrtümlicherweise befand glaubte, dass spring.data.mongodb.username und spring.data.mongodb.password dies abdeckten. Verwenden Sie also entweder die URI mit Benutzername und Passwort oder verwenden Sie explizit die Spring-Eigenschaften von Host und Datenbank (und möglicherweise auch Port). Hier ist der Code. Es funktioniert in der Spring-Boot-App mit MongoDB-Unterstützung (verwenden Sie initializr oder IntelliJ, um dieses Projekt zu erstellen). Ich habe ein Modell:

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 ...
}

Die Daten werden über ein Repository gelesen und geschrieben:

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> {
}

Der Datenbankname, der Host und die Anmeldedaten befinden sich in der Datei „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

Wichtig ist, die URI nicht mit Datenbank und Benutzername zu vermischen. Wenn Sie uri verwenden, müssen Benutzername und Passwort wie folgt enthalten sein:

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

Um dies zu testen, habe ich einen einfachen Spring-Befehlszeilen-Runner verwendet:

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);
        }
    }
}

Ich hoffe, diese Erklärung hilft anderen, die es nicht herausfinden konnten, wie ich für ein paar Tage.

Danke,

Stefan