Не удается подключиться к репозиторию SVN через API SvnKit

У нас есть SVN-репозиторий, и я могу подключиться к нему через Tortoise. Но когда я пытаюсь подключиться к нему через SvnKit, особенно svnRepository.testConnection() метод, это говоритsvn: E170001: Authentication required for ..., Передаваемые учетные данные те же, что и у Черепахи.

Этот конкретный компонент прекрасно работает с другими репозиториями. Кроме того, этот репозиторий защищен. Но я могу подключаться и к другим безопасным репозиториям.

Вот журнал ошибок.

org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Authentication required for 'server name:443'
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.authenticationFailed(SVNErrorManager.java:47)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.authenticationFailed(SVNErrorManager.java:41)
    at org.tmatesoft.svn.core.auth.BasicAuthenticationManager.getNextAuthentication(BasicAuthenticationManager.java:223)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:657)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:362)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:350)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:708)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:628)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:103)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1016)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.testConnection(DAVRepository.java:99)

Ждем решения.

1 ответ

Решение простое: позвоните

svnRepository.setAuthenticationManager(...);

с правильной реализацией ISVNAuthenticationManager.

SVNKit уже имеет несколько готовых реализаций этого класса. Самый простой BasicAuthenticationManager который может быть построен одним или несколькими SVNAuthentication, каждый SVNAuthentication экземпляр представляет некоторые учетные данные (см. его подклассы). Так что, если, например, ваш репозиторий защищен только именем пользователя и паролем, вы можете создать SVNPasswordAuthentication с вашим паролем, а затем построить BasicAuthenticationManager используя его и перейти к SVNRepository,

Еще одна полезная реализация DefaultSVNAuthenticationManager который описывает "данные аутентификации, хранящиеся в ~/.subversion каталог ". Для его построения можно использовать SVNWCUtil.createDefaultAuthenticationManager(), Вы также можете настроить этот класс, например, чтобы разрешить или запретить ввод пароля с клавиатуры в интерактивном режиме, или сохранять или не сохранять введенный пароль в ~/.subversion каталог (или также вы можете использовать другой каталог для этого). Чтобы понять, как это сделать, я рекомендую вам взглянуть на SVNCommandEnvironment.createClientAuthenticationManager() какие конструкции ISVNAuthenticationManager реализация для утилиты командной строки.

Другие вопросы по тегам