2012-05-22 101 views
0

我想从我的Java应用程序发送REST请求以在jira中创建问题。 所以我没有发送请求的问题,并创建完美,而我通过浏览器创建问题(原因,如果我没有错误JIRA使用Cookie来自动化) 任何人都可以给我建议如何在Java中实现OAuth jira授权? 我从来没有这样做过,我认为这并不难,但我不知道我需要开始。 我发现这个OAuth examplethis JIRA的REST请求文档。 你可以给我建议任何关于OAuth的文档或任何有关java自动化的例子。使用Java在jira进行OAuth身份验证

谢谢先进。

+1

我假设你已经在这里了,但你不能比[官方网站](http://oauth.net/)更好地了解它是如何工作的。 – kentcdodds

+0

谢谢我现在阅读它) –

+0

你能发布你评论就像一个答案? –

回答

1

我假设你已经来过这里了,但是你不能比official website更好地了解它是如何工作的。

(从我的评论移植过来了作为要求)

2

这里是我的答案在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";} 
+1

你能解释一下你如何生成你在这里提到的'privatekey'。我用openssl来创建一个。但它并没有给我正确的结果。 – DivyaMenon

+0

有什么方法可以使用插件自动添加应用程序链接? – Vivek

+0

@DivyaMenon我在这里找到了'privateKey':https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-oauth -authentication。它是以'MIIBIj ...'开头的长字符串。 – Abbas