Svn Authentication имя пользователя, пароль с помощью Svn Kit

Я пытаюсь аутентифицировать имя пользователя, пароль, введенный пользователем с помощью svnkit 1.7.8. В настоящее время я использую «DefaultAuthenticationManager» в методе «authenticate» для достижения этой цели. Проблема, с которой я сталкиваюсь, заключается в том, что даже когда я ввожу неверные учетные данные, метод не выдает никаких ошибок и продолжает выполнение кода.

Мой код..

 private void authenticate(String user, String password) throws SVNException {
    SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(baseUrl));
    ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(user, password);
    repository.setAuthenticationManager(authManager);
} 

Эта ошибка связана с использованием «DefaultAuthenticationManager» вместо «BasicAuthenticationManager»?? Пожалуйста помоги

ПРИМЕЧАНИЕ:

Я проверяю каталог svn с URL-адреса https. У меня уже есть рабочий код для проверки каталога из SVN на локальный компьютер, просто нужна помощь с частью аутентификации.


person Lucy    schedule 03.02.2015    source источник
comment
Вы создаете объект SVNRepository, устанавливаете для него драйвер аутентификации, а затем выбрасываете его. Как вы используете репозиторий?   -  person Asa    schedule 03.02.2015
comment
Я использую его для проверки каталога svn на моей локальной машине. Для аутентификации я использую приведенный выше код.   -  person Lucy    schedule 03.02.2015


Ответы (2)


Как я уже упоминал в своем комментарии, вы выбрасываете экземпляр SVNRepository, который вы инициализировали с помощью AuthmenticationManager.

Если вы помните этот ответ, который вы прокомментировали, и если бы вы прочитали документация, нетрудно придумать что-то вроде этого:

final SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(user, password);
svnOperationFactory.setAuthenticationManager(authManager);

try {
    final SvnCheckout checkout = svnOperationFactory.createCheckout();
    checkout.setSingleTarget(SvnTarget.fromFile(workingCopyDirectory));
    checkout.setSource(SvnTarget.fromURL(url));
    //... other options
    checkout.run();
} finally {
    svnOperationFactory.dispose();
}

EDIT: Если вам действительно нужно использовать SVNRepository

просто сделать:

SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(baseUrl));
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(user, password);
repository.setAuthenticationManager(authManager);

// now do any operation that you want with the *same* repository object
repository.checkout(..)
person Asa    schedule 03.02.2015
comment
Проблема, с которой я сталкиваюсь при использовании DefaultAuthenticationManager, заключается в том, что даже когда я ввожу неправильные учетные данные на компьютере с Windows, выполнение кода продолжается, пока оно останавливается на компьютере с Linux, даже если учетные данные верны. Решит ли ваш код проблему? Пожалуйста, смотрите мое примечание в вопросе - person Lucy; 03.02.2015
comment
@ DmitryPavlenko Не могли бы вы подсказать решение этой проблемы?? - person Lucy; 23.03.2015

Вы можете протестировать приведенный ниже фрагмент кода: я столкнулся с той же проблемой, и вот как я ее исправил.

Используемый API:

svnkit-1.7.8.jar

public boolean testSVNConnection(String svnURL,String svnUser,String svnPass){
 DAVRepositoryFactory.setup();
 String url="https://your_svn_host/path/";
 String name="username";
 String password="password";
 SVNRepository repository = null;
 try { 
     repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
     ISVNAuthenticationManager authManager = 
                  SVNWCUtil.createDefaultAuthenticationManager(name, password);
     repository.setAuthenticationManager(authManager);
     repository.testConnection();
     System.out.println("Connection done..");
     return true;
 } catch (SVNException e){
     System.out.println("Not connected");
     e.printStackTrace();
     return false;
 }

}

Просто измените подпись метода в соответствии с требованиями.

person MonsterJava    schedule 12.01.2016