SVNKit 身份验证错误 E170001,但仅在签出时且仅在一台计算机上

问题描述 投票:0回答:1

我完全被我遇到的 SVNKit (1.8.5) 错误难住了。我使用以下模式来构建身份验证管理器:

public static SVNRepository getSvnRepository(String userName, String pass, String repoURL) throws SVNException
{
      SVNRepository repository;
      repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(repoURL));
      ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(userName, pass);
      repository.setAuthenticationManager(authManager);

      return repository;
}

我在多个地方使用此模式,以确保用户可以针对存储库进行身份验证,获取存储库中所有文件夹的列表,甚至探索子文件夹的顶层以解析文件和建立依赖图。这一切都成功了。

但是当我尝试运行结帐时,我收到身份验证错误。令人费解的是,这个错误只发生在我们办公室的一台计算机上。其他几台运行 OS X、Windows 和各种版本 Ubuntu 的计算机对此过程没有任何问题,并且可以检查没有问题,但运行 Ubuntu 12.10 的一台特定计算机在尝试运行以下命令时失败:

SVNRepository repository = getSvnRepository(userName, pass, url + "/" + subfolder);
SvnOperationFactory factory = new SvnOperationFactory();
SvnCheckout checkout = factory.createCheckout();
checkout.setSource(SvnTarget.fromURL(repository.getLocation()));
checkout.setSingleTarget(SvnTarget.fromFile(location.resolve(project).toFile()));
checkout.run();

堆栈跟踪:

org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Authentication required for '<https://[snip]: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.internal.wc.DefaultSVNAuthenticationManager.getFirstAuthentication(DefaultSVNAuthenticationManager.java:186)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:682)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:371)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:359)
        at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:710)
        at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:627)
        at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:102)
        at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1032)
        at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getLatestRevision(DAVRepository.java:175)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgRepositoryAccess.getRevisionNumber(SvnNgRepositoryAccess.java:118)
        at org.tmatesoft.svn.core.internal.wc2.SvnRepositoryAccess.getLocations(SvnRepositoryAccess.java:182)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgRepositoryAccess.createRepositoryFor(SvnNgRepositoryAccess.java:45)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgAbstractUpdate.checkout(SvnNgAbstractUpdate.java:756)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCheckout.run(SvnNgCheckout.java:16)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCheckout.run(SvnNgCheckout.java:10)
        at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgOperationRunner.run(SvnNgOperationRunner.java:20)
        at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:20)
        at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1149)
        at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:294)
java linux svnkit
1个回答
0
投票

我最近在 Windows 中遇到了同样的回溯问题。这让我很困惑,因为我已经通过 svnkit 成功地检查了公司内其他路径的内容,但无法理解为什么这个特定路径通过 svnkit 被阻塞。

我获取了 svnkit 的源代码来协助调试,并注意到它正在检查路径“

C:\Users\gurcei\AppData\Roaming\Subversion\auth\svn.simple\
”中缓存的身份验证详细信息。

这里有一个名为“

870755ae945b...
”的文件(可能每次都是随机数),当我在文本编辑器中打开它时,我可以看到它包含凭据详细信息,并且它还提到了相关的域名/领域这些凭证。

我注意到该文件使用了一个短域名,例如:

K 15
svn:realmstring
V 43
<https://subversionxy:443> Subversion Realm

这让我明白了为什么我的结账失败是通过 svnkit 窒息的。我不小心为路径提供了完全限定的域名(例如,

https://subversionxy.my.company.com/...
),我认为这意味着 svnkit 无法在缓存中找到凭据。

切换到短域名(例如,

https://subversionxy/...
)后,结帐对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.