2014-09-02 54 views
0

基於Scribe example on github,我試圖授權我的應用程序使用LinkedIn的api。如何使用JSF的Scribe連接LinkedIn API?

這裏是綁在按鈕點擊我當前的代碼:

public String generateFromLinkedIn() { 
    OAuthService service = new ServiceBuilder() 
     .provider(LinkedInApi.class) 
     .apiKey(apiKey) 
     .apiSecret(apiSecret) 
     .callback("http://localhost:8080/Project/faces/linkedIn.xhtml").build(); 

    ExternalContext externalContext = FacesContext.getCurrentInstance() 
     .getExternalContext(); 

    Token requestToken = service.getRequestToken(); 
    String authUrl = service.getAuthorizationUrl(requestToken); 

    try { 
     externalContext.redirect(authUrl); 
    } catch (IOException ex) { 
     Logger.getLogger(LinkedInController.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap(); 

    Verifier v = new Verifier(parameterMap.get("oauth_verifier")); 
    Token accessToken = service.getAccessToken(requestToken, v); 

    OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.linkedin.com/v1/people/~"); 

    service.signRequest(accessToken, request); 
    Response response = request.send(); 

    System.err.println(response.getBody()); 

    return ""; 
} 

在我.xhtml頁面我有:

<h:commandButton value="Generate" action="#{linkedInController.generateFromLinkedIn()}"></h:commandButton> 

一切工作好,直到我設法得到驗證從沒有任何oauth_verifier的參數圖。我嘗試將它分成多個方法,但到目前爲止,我無法從URL參數獲取oauth_verifier,即使它在LinkedIn授權對話框返回後顯然存在。

有關如何正確獲取此驗證程序或如何使Scribe與JSF一起工作的任何建議?

回答

1

您似乎以某種方式期待重定向的請求魔法返回到代碼中完全相同的位置,並從那裏繼續。這是不真實的。它實際上是2個HTTP請求。你基本上仍然在當前請求(稱爲generateFromLinkedIn()方法的參數圖)的參數圖中擺弄。

在您致電redirect()後,您應該從方法返回。您應該將剩餘的代碼移動到與linkedIn.xhtml連接的支持bean的@PostConstruct<f:viewAction>。這是用參數調用的人。

+0

感謝BalusC,將剩餘的代碼移動到支持bean的@PostConstruct工作。我感謝您的幫助! – greenJavaDev 2014-09-02 18:38:47

+0

不客氣。 – BalusC 2014-09-02 18:49:19