这里是我的答案在Atlassian的论坛同样的问题:
这是非常哈克,但它与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
谢谢我现在阅读它) –
你能发布你评论就像一个答案? –