[SPRING] Spring을 사용하여 인증이 필요한 MongoDB에 연결하는 방법
SPRINGSpring을 사용하여 인증이 필요한 MongoDB에 연결하는 방법
mongoDB에 연결하기 위해 아래의 Spring 설정을 사용하고 있습니다.
<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="${mongodb.dbname}"/>
</bean>
<bean class="com.mongodb.MongoURI" id="mongoUri">
<constructor-arg value="${mongodb.url}" />
</bean>
<bean class="com.mongodb.Mongo" id="mongo">
<constructor-arg ref="mongoUri" />
</bean>
mongo.url = mongodb : //
그러나 인증 오류가 발생합니다. 나의 이해는 MongoUI가 위의 형식으로 URL을 취할 수 있다는 것이다.
mongoTemplate이 userCredentials 객체를 받아 들일 수 있다는 것을 알고 있지만 URL에서 먼저 추출해야하고 구성에서이를 수행하는 방법을 모르겠습니다.
어떤 생각을 어떻게하면 위의 mongo.url 형식을 변경할 수 없다는 가정하에이 설정을 변경할 수 있습니까?
해결법
-
==============================
1.Spring Expression Language를 사용하여 솔루션을 찾았습니다.
Spring Expression Language를 사용하여 솔루션을 찾았습니다.
<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate"> <constructor-arg name="mongo" ref="mongo"/> <constructor-arg name="databaseName" value="${mongodb.dbname}"/> <constructor-arg name="userCredentials" ref="mongoCredentials"/> </bean> <bean id="mongoCredentials" class="org.springframework.data.authentication.UserCredentials"> <property name="username" value="#{mongoURI.username}" /> <property name="password" value="#{new java.lang.String(mongoURI.password)}" /> </bean> <bean class="com.mongodb.MongoURI" id="mongoURI"> <constructor-arg value="${mongodb.url}" /> </bean> <bean class="com.mongodb.Mongo" id="mongo"> <constructor-arg ref="mongoURI" /> </bean>
-
==============================
2.java config를 사용하여 인증을 추가하려면
java config를 사용하여 인증을 추가하려면
@Configuration @EnableMongoRepositories("path.to.your.repository") public class MongoConfig extends AbstractMongoConfiguration { @Value("${mongodb.name}") private String dbName; @Value("${mongodb.host}") private String host; @Value("${mongodb.port}") private Integer port; @Value("${mongodb.username}") private String userName; @Value("${mongodb.password}") private String password; @Override protected String getDatabaseName() { return this.dbName; } @Override public Mongo mongo() throws Exception { return new MongoClient(this.host, this.port); } @Override @Bean public SimpleMongoDbFactory mongoDbFactory() throws Exception { return new SimpleMongoDbFactory(mongo(), getDatabaseName()); } @Override @Bean public MongoTemplate mongoTemplate() throws Exception { final UserCredentials userCredentials = new UserCredentials(this.userName, this.password); final MongoTemplate mongoTemplate = new MongoTemplate(mongo(), getDatabaseName(), userCredentials); mongoTemplate.setWriteConcern(WriteConcern.SAFE); return mongoTemplate; } }
-
==============================
3.@Lealem Admassu의 자바 구성에 대한 대답을 업데이트하기 위해 Mongo 3에서 API를 변경 했으므로 이제는 UserCredentials 대신 Mongo의 MongoCredentials를 사용하는 것이 좋습니다.
@Lealem Admassu의 자바 구성에 대한 대답을 업데이트하기 위해 Mongo 3에서 API를 변경 했으므로 이제는 UserCredentials 대신 Mongo의 MongoCredentials를 사용하는 것이 좋습니다.
다음은 MongoClient를 얻는 간단한 예제입니다. http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.mongo-3.authentication
다음 코드는 모듈 식으로 할 수 있지만, 나를 위해 다소 효과적입니다 (MongoTemplate이 필요했습니다).
public MongoTemplate getMongoTemplate(String host, int port, String authenticationDB, String database, String user, char[] password) throws UnknownHostException { return new MongoTemplate( new SimpleMongoDbFactory( new MongoClient( new ServerAddress(host, port), Collections.singletonList( MongoCredential.createCredential( user, authenticationDB, password ) ) ), database ) ); }
from https://stackoverflow.com/questions/10249816/how-to-use-spring-to-connect-to-mongodb-which-requires-authentication by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RESTful 끝점에 대한 스프링 폼 기반 로그인을 비활성화하려면 어떻게합니까? (0) | 2019.01.14 |
---|---|
[SPRING] 스프링 XML 구성 파일에서 Java Date 객체를 초기화하는 방법은 무엇입니까? (0) | 2019.01.14 |
[SPRING] Spring JPA의 기존 엔티티를 참조하는 새로운 엔티티를 저장하는 방법은 무엇입니까? (0) | 2019.01.14 |
[SPRING] Spring Security 3.2에서 Access-Control-Origin 필터를 문제없이 설치하는 방법 (0) | 2019.01.14 |
[SPRING] Spring : 프로필에 따라 다른 속성 파일 삽입 (0) | 2019.01.14 |