0

我们有一个 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)

期待解决方案。

4

1 回答 1

1

解决方法很简单:调用

svnRepository.setAuthenticationManager(...);

使用适当的 ISVNAuthenticationManager 实现。

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

另一个有用的实现是DefaultSVNAuthenticationManager描述“存储在~/.subversion目录中的认证数据”。要构建它,您可以使用SVNWCUtil.createDefaultAuthenticationManager(). 您还可以自定义此类,例如,允许或禁止在交互模式下从键盘输入密码,或者将输入的密码存储或不存储在~/.subversion目录中(或者您也可以使用另一个目录)。要了解如何做到这一点,我建议您查看命令行实用程序的SVNCommandEnvironment.createClientAuthenticationManager()哪些构造 ISVNAuthenticationManager实现。

于 2013-09-06T12:34:46.860 回答