Вот мой ответ на тот же вопрос в форуме Atlassian:
Это очень Hacky, но она совместима с JiraRestClientFactory
. Сначала следуйте за JIRA REST API Tutorial, чтобы получить токен доступа. Прочтите их исходный код, чтобы точно понимать, что они делают, поскольку мой код основан на их коде. В их коде используется библиотека net.oauth
. Поскольку эта библиотека не находится под центральным хранилищем Maven, вам нужно добавить его в хранилище в файл Maven:
<repository>
<id>oauth</id>
<url>http://oauth.googlecode.com/svn/code/maven/</url>
</repository>
...
<dependency>
<groupId>net.oauth.core</groupId>
<artifactId>oauth</artifactId>
<version>20100527</version>
</dependency>
<dependency>
<groupId>net.oauth.core</groupId>
<artifactId>oauth-consumer</artifactId>
<version>20100527</version>
</dependency>
<dependency>
<groupId>net.oauth.core</groupId>
<artifactId>oauth-httpclient4</artifactId>
<version>20090913</version>
</dependency>
Теперь мы должны объединить, что учебник сделал, чтобы сделать проверку подлинности запросов с новым AuthenticationHandler.
@Test
public void test() throws Exception {
final JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
final URI jiraServerUri = new URI("https://your.jira.instance");
JiraRestClient restClient = null;
// restClient = factory.createWithBasicHttpAuthentication(jiraServerUri, "user", "pass"); // old way of doing it
restClient = factory.create(jiraServerUri, new AuthenticationHandler() {
@Override
public void configure(Request request) {
try {
OAuthAccessor accessor = getAccessor();
accessor.accessToken = access_token;
OAuthMessage request2 = accessor.newRequestMessage(null, request.getUri().toString(), Collections.<Map.Entry<?, ?>>emptySet(), request.getEntityStream());
Object accepted = accessor.consumer.getProperty(OAuthConsumer.ACCEPT_ENCODING);
if (accepted != null) {
request2.getHeaders().add(new OAuth.Parameter(HttpMessage.ACCEPT_ENCODING, accepted.toString()));
}
Object ps = accessor.consumer.getProperty(OAuthClient.PARAMETER_STYLE);
ParameterStyle style = (ps == null) ? ParameterStyle.BODY
: Enum.valueOf(ParameterStyle.class, ps.toString());
HttpMessage httpRequest = HttpMessage.newRequest(request2, style);
for (Entry<String, String> ap : httpRequest.headers)
request.setHeader(ap.getKey(), ap.getValue());
request.setUri(httpRequest.url.toURI());
} catch (Exception e) {
e.printStackTrace();
}
}
});
final int buildNumber = restClient.getMetadataClient().getServerInfo().claim().getBuildNumber();
assertTrue(buildNumber > 0);
}
private final OAuthAccessor getAccessor()
{
if (accessor == null)
{
OAuthServiceProvider serviceProvider = new OAuthServiceProvider(getRequestTokenUrl(), getAuthorizeUrl(), getAccessTokenUrl());
OAuthConsumer consumer = new OAuthConsumer(callback, consumerKey, null, serviceProvider);
consumer.setProperty(RSA_SHA1.PRIVATE_KEY, privateKey);
consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.RSA_SHA1);
accessor = new OAuthAccessor(consumer);
}
return accessor;
}
private String getAccessTokenUrl()
{
return baseUrl + SERVLET_BASE_URL + "/oauth/access-token";
}
private String getRequestTokenUrl()
{
return baseUrl + SERVLET_BASE_URL + "/oauth/request-token";
}
public String getAuthorizeUrlForToken(String token)
{
return getAuthorizeUrl() + "?oauth_token=" + token;
}
private String getAuthorizeUrl() {return baseUrl + SERVLET_BASE_URL + "/oauth/authorize";}
Я предполагаю, что вы были уже здесь, но вы не можете получить намного лучше, чем [официальный сайт] (http://oauth.net/) для документации о том, как она работает. – kentcdodds
спасибо, я прочитал его сейчас) –
Можете ли вы высказать свое мнение как ответ? –