在用户成功通过身份验证后继续执行代码

时间:2018-05-21 12:10:35

标签: java exception-handling jgit

我正在用Java创建一个应用程序并使用jGit(继续到how to authorize an user using jGit)。目前我能够隔离异常,如果用户提供无效凭证,我会得到not authorized,如果用户无法访问所声明的回购,我会得repository not found。现在我的问题是,用户正在进行身份验证,因为用户无权访问repo,第二个异常被抛出。但是在这里我想在另一个类中处理它,即我希望这个类只处理用户的身份验证。以下是我的代码

import java.io.File;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;

public class AuthenticateanUser {

    public static void main(String[] args) throws Exception {
        final String REMOTE_URL = "https://myRepo.git";
        // prepare a new folder for the cloned repository
        File localPath = File.createTempFile("TestGitRepository", "");
        localPath.delete();
        // then clone
        try (Git result = Git.cloneRepository().setURI(REMOTE_URL)
                .setCredentialsProvider(new UsernamePasswordCredentialsProvider("myId", "myPwd"))
                .setDirectory(localPath).call()) {

            System.out.println("Having repository: " + result.status());
        } catch (Exception e) {
        if (e.getMessage().toLowerCase().contains("repository not found"))
            System.out.println("Exception Repo not found");
        else if (e.getMessage().toLowerCase().contains("not authorized"))
            System.out.println("Exception Invalid Credentials");
        else
            System.out.println(e);

    }
    }

}

请让我知道我哪里出错了,我该如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

您应该链接异常而不能使用顶级异常类。克隆时会抛出GitAPIException。您可以先尝试捕获可能的案例,让主要的Exception处理休息。

public static <R>R handleClone(String uri,File local,boolean bare,Function<Git,R> fn){
  try {
    Git g=Git.cloneRepository().setURI(uri).setBare(bare).setDirectory(local).call();
    return handle(g,fn);
  }
 catch (  GitAPIException e) {
    throw new IllegalStateException(e);
  }
}

异常链接示例:

catch (  IOException e) {
    return new Status(IStatus.ERROR,GitActivator.PI_GIT,"Error cloning git repository",e);
  }
catch (  CoreException e) {
    return e.getStatus();
  }
catch (  GitAPIException e) {
    return getGitAPIExceptionStatus(e,"Error cloning git repository");
  }
catch (  JGitInternalException e) {
    return getJGitInternalExceptionStatus(e,"Error cloning git repository");
  }
catch (  Exception e) {
    return new Status(IStatus.ERROR,GitActivator.PI_GIT,"Error cloning git repository",e);
  }
  return Status.OK_STATUS;
}