Не удается подключиться к репозиторию 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
реализация для утилиты командной строки.