JGit is a lightweight, pure Java library implementing the Git version control system. You can do a lot of operations using Java language such as create or clone Git repos, create branches, make commits, rebase or tag, you can see this repo to learn how to use JGit and how to code the different commands.
But one thing that does not cover extensively is the authentication process. In this post I am going to show you how how to authenticate to a Git repository with JGit.
First thing to do is add JGit as dependency:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependency> | |
<groupId>org.eclipse.jgit</groupId> | |
<artifactId>org.eclipse.jgit</artifactId> | |
<version>4.5.0.201609210915-r</version> | |
</dependency> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>slf4j-api</artifactId> | |
<version>1.7.21</version> | |
</dependency> |
Then let's see a simple clone without authentication:
In this case no authentication method is set. Now let's see how to add a username and password in case of for example private repos:
In this case you only need to set as credential provider the UsernameAndPasswordCredentialsProvider and pass the required username and password.
The final scenario I am going to show here is how to authenticate against a git repository using your ssh keys, that is using (~/.ssh/id_rsa) and setting the passphrase to access it.
In this case you need to extend JSchConfigSessionFactory to be able to set passphrase to access to private key. To do it you set a custom UserInfo implementation where the getPassphrase method returns the passphrase to use and promptPassphrase method should return true.
After that you only need to set the transport configuration to the one created.
We keep learning,
Alex.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Test | |
public void should_connect_to_public_repo() throws IOException, GitAPIException { | |
final String REMOTE_URL = "https://github.com/lordofthejars/wildfly-example.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) | |
.setDirectory(localPath) | |
.call()) { | |
// Important to close the repo after being used | |
System.out.println("Having repository: " + result.getRepository().getDirectory()); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Test | |
public void should_connect_using_user_pass() throws IOException, GitAPIException { | |
final String REMOTE_URL = "https://asotobu@bitbucket.org/asotobu/backup.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("username", "password")) | |
.setDirectory(localPath) | |
.call()) { | |
System.out.println("Having repository: " + result.getRepository().getDirectory()); | |
} | |
} |
In this case you only need to set as credential provider the UsernameAndPasswordCredentialsProvider and pass the required username and password.
The final scenario I am going to show here is how to authenticate against a git repository using your ssh keys, that is using (~/.ssh/id_rsa) and setting the passphrase to access it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Test | |
public void should_connect_to_public_ssh() throws IOException, GitAPIException { | |
final String REMOTE_URL = "git@github.com:lordofthejars/wildfly-example.git"; | |
SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() { | |
@Override | |
protected void configure(OpenSshConfig.Host host, Session session ) { | |
session.setUserInfo(new UserInfo() { | |
@Override | |
public String getPassphrase() { | |
return "passphrase"; | |
} | |
@Override | |
public String getPassword() {return null;} | |
@Override | |
public boolean promptPassword(String message) {return false;} | |
@Override | |
public boolean promptPassphrase(String message) {return true;} | |
@Override | |
public boolean promptYesNo(String message) {return false;} | |
@Override | |
public void showMessage(String message) {} | |
}); | |
} | |
}; | |
File localPath = File.createTempFile("TestGitRepository", ""); | |
localPath.delete(); | |
try (Git result = Git.cloneRepository() | |
.setURI(REMOTE_URL) | |
.setTransportConfigCallback(transport -> { | |
SshTransport sshTransport = ( SshTransport )transport; | |
sshTransport.setSshSessionFactory( sshSessionFactory ); | |
}) | |
.setDirectory(localPath) | |
.call()) { | |
System.out.println("Having repository: " + result.getRepository().getDirectory()); | |
} | |
} |
In this case you need to extend JSchConfigSessionFactory to be able to set passphrase to access to private key. To do it you set a custom UserInfo implementation where the getPassphrase method returns the passphrase to use and promptPassphrase method should return true.
After that you only need to set the transport configuration to the one created.
We keep learning,
Alex.
Chan eil inneal-ciùil a ghleusar, 'Dhùisgeas smuain mo chléibh gu aoibh, Mar nì duan o bheul nan caileag, Oidhche mhath leibh, beannachd leibh (Oidche Mhath Leibh - Ossian)Music: https://www.youtube.com/watch?v=mi4SCOYAdEk
calvin klein outlet
ResponderEliminarnike air max 2017
hermes handbags
kd 12
louboutin
Kanye West shoes
jordan shoes
timberland
supreme new york
hermes birkin
I’m impressed, I must say. Really rarely do I encounter a blog that’s both educative and entertaining, and let me tell you, you have hit the nail on the head. Your idea is outstanding; the issue is something that not enough people are speaking intelligently about. I am very happy that I stumbled across this in my search for something relating to this.
ResponderEliminarCopytechnet.com
Information
Click Here
Visit Web
I am not happy with the Human Resource policies because there are so many things which the agency not considering, by the way I have new plans for the current scenario which is running on most of the agencies. because of delivering the master thesis paper help to the university and colleges students.
ResponderEliminar