我们有一个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)
期待解决方案。
答案 0 :(得分:1)
解决方案很简单:致电
svnRepository.setAuthenticationManager(...);
使用正确的ISVNAuthenticationManager实现。
SVNKit已经有几个这个类的现成实现。最简单的一个是BasicAuthenticationManager
,它可以由一个或多个SVNAuthentication
构成。每个SVNAuthentication
实例代表某种凭证(参见其子类)。
因此,例如,如果您的存储库仅受用户名和密码保护,则可以使用密码构建SVNPasswordAuthentication
,然后使用它构建BasicAuthenticationManager
并传递给SVNRepository
。
另一个有用的实现是DefaultSVNAuthenticationManager
,它描述了“~/.subversion
目录中存储的身份验证数据”。要构建它,您可以使用SVNWCUtil.createDefaultAuthenticationManager()
。您也可以自定义此类,例如,允许或禁止以交互模式从键盘输入密码,或者存储或不存储输入的密码在~/.subversion
目录中(或者您也可以使用其他目录)为了那个原因)。要了解如何执行此操作,建议您查看SVNCommandEnvironment.createClientAuthenticationManager()
构造ISVNAuthenticationManager
命令行实用程序的实现。