2017-05-23 26 views
0

여기에 특정 사용자의 로그인 세부 정보를 확인하려고합니다.어떻게 MongoSecurityException을 잡을 수 있습니까?

이것은 제대로 작동하지 않습니다. 이유가 무엇인지 모르겠지만 MongoSecurityException이 있더라도 catch 블록에 도달 할 수 없습니다. 누군가 왜 그 이유를 알고 있습니까?

try{ 
      MongoCredential credential = MongoCredential.createCredential("user", "admin", 
        "password".toCharArray()); 

      ServerAddress address = new ServerAddress("localhost", 27017); 
      mongoClient = new MongoClient(address, Arrays.asList(credential)); 
      }catch (MongoSecurityException e) { 
       e.printStackTrace(); 
      } 

업데이트 :

스택 추적 :

May 24, 2017 1:01:08 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
May 24, 2017 1:01:08 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Exception in monitor thread while connecting to server localhost:27017 
com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='test', source='admin', password=<hidden>, mechanismProperties={}} 
    at com.mongodb.connection.SaslAuthenticator.wrapInMongoSecurityException(SaslAuthenticator.java:157) 
    at com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:37) 
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:66) 
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:44) 
    at com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:162) 
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:44) 
    at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) 
    at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:109) 
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:46) 
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:116) 
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" } 
    at com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java:170) 
    at com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123) 
    at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32) 
    at com.mongodb.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:117) 
    at com.mongodb.connection.SaslAuthenticator.access$000(SaslAuthenticator.java:37) 
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:50) 
    ... 9 more 
+0

을 처리 할 수 ​​

당신은 '기적'처리하는 MongoTimeoutException 기다릴 수 있습니까? MongoSecurityException이 try 블록에서 던져지고 다른 곳에서 던져지지 않았습니까? – quinz

+0

무엇이 문제입니까? 당신은 MongoSecurityException을 잡아 그것을 잡아서 stacktrace를 출력한다. 그것은 당신의 코드입니다. 또는 stacktrace를 어디에서 가져 왔습니까? –

+0

I ' m 잡기가 어렵습니다. ' 어디에서 스택 추적을 가져 왔는지 알 수 없습니다. catch 블록에서 다른 작업을 시도했을 때 ' t를 얻었습니다. 시도했을 때 ... catch (MongoSecurityException e) { System.out.println ("Access denied"); } 연결이 설정되었는지 여부를 아는 것만으로 실제로 인쇄하지 않고 실제로 원하는 작업을 인쇄하지 못했습니다. – Max

답변

0

가 백그라운드 스레드에서 발생합니다과 같이 MongoSecurityException를 잡을 수 없습니다.

MongoClientOptions clientOptions = new MongoClientOptions.Builder().serverSelectionTimeout(500).build(); 
    mongoClient = new MongoClient(serverAddress, Collections.singletonList(credential), clientOptions); 
    try { 
     String address = mongoClient.getConnectPoint(); 
     System.out.println(address); 
    }catch (Throwable e){ 
     System.out.println(e); 
    } 

을 또는 당신은 당신이 더 많은 정보를 우리에게 보여 스택 추적 한 마십시오 ServerListener를 구현하고 비동기

{ 
MongoClientOptions clientOptions = new MongoClientOptions.Builder().addServerListener(this).build(); 
mongoClient = new MongoClient(host1, Collections.singletonList(credential), clientOptions); 
} 

@Override 
public void serverDescriptionChanged(ServerDescriptionChangedEvent event) { 
    Throwable exception = event.getNewDescription().getException(); 
    handle(exception); 
}