无法通过SvnKit API连接到SVN存储库

时间:2013-09-06 03:56:48

标签: svn tortoisesvn svnkit

我们有一个SVN存储库,我可以通过Tortoise连接到它。但当我尝试通过SvnKit连接它时,特别是svnRepository.testConnection()方法,它说 svn: E170001: Authentication required for ...。传入的凭据与我在Tortoise中使用的凭据相同。

此特定组件可与其他存储库一起使用。此外,此存储库是安全的。但我也可以连接到其他安全存储库。

这是错误日志。

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 个答案:

答案 0 :(得分:1)

解决方案很简单:致电

svnRepository.setAuthenticationManager(...);

使用正确的ISVNAuthenticationManager实现。

SVNKit已经有几个这个类的现成实现。最简单的一个是BasicAuthenticationManager,它可以由一个或多个SVNAuthentication构成。每个SVNAuthentication实例代表某种凭证(参见其子类)。 因此,例如,如果您的存储库仅受用户名和密码保护,则可以使用密码构建SVNPasswordAuthentication,然后使用它构建BasicAuthenticationManager并传递给SVNRepository

另一个有用的实现是DefaultSVNAuthenticationManager,它描述了“~/.subversion目录中存储的身份验证数据”。要构建它,您可以使用SVNWCUtil.createDefaultAuthenticationManager()。您也可以自定义此类,例如,允许或禁止以交互模式从键盘输入密码,或者存储或不存储输入的密码在~/.subversion目录中(或者您也可以使用其他目录)为了那个原因)。要了解如何执行此操作,建议您查看SVNCommandEnvironment.createClientAuthenticationManager()构造ISVNAuthenticationManager命令行实用程序的实现。