I think maybe the mongodb's authorization has little hard to understand.
This works for me,
@Configuration
public class MongoConfig {
@Value("${mongo.host}")
private String host;
@Value("#{new Integer('${mongo.port}')}")
private Integer port;
@Value("${mongo.database}")
private String database;
@Value("${mongo.username}")
private String username;
@Value("${mongo.password}")
private String password;
public @Bean MongoClientFactoryBean mongoDbFactory() throws Exception {
MongoClientFactoryBean clientFactoryBean = new MongoClientFactoryBean();
clientFactoryBean.setHost(host);
clientFactoryBean.setPort(port);
MongoCredential credential = MongoCredential.createScramSha1Credential(username, database, password.toCharArray());
clientFactoryBean.setCredentials(new MongoCredential[]{credential});
return clientFactoryBean;
}
public @Bean MongoTemplate mongoTemplate(Mongo mongo) throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongo, database);
return mongoTemplate;
}
}
---------------------------------
mongo.host=127.0.0.1
mongo.port=27017
mongo.username=hisoka
mongo.password=welcome
mongo.database=test
----------------------------
Just in mongod cmd create user hisoka for db test,
db.createUser({"user":"hisoka","pwd":"welcome","roles":[{role:"readWrite",db:"test"}]});
------------------------------
Take look in mongoChef, the mongodb auth info:
{
"_id" : "test.hisoka",
"user" : "hisoka",
"db" : "test",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : NumberInt(10000),
"salt" : "tfXYRbCj6N433PFWJzwarA==",
"storedKey" : "pMnNVX7Co7AY7Q4b/dtq18IQfeE=",
"serverKey" : "x8vUt590SYVxqW2PW6DA849iTgE="
}
},
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}