2014-09-02 4 views
0

Основываясь на Scribe example on github, я пытаюсь разрешить свое приложение использовать api LinkedIn.Как я могу использовать Scribe с JSF для подключения к API LinkedIn?

Вот мой текущий код, который привязан к нажатию кнопки:

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> 

Все работает хорошо, пока я пытаюсь получить Verifier из карты параметров, которая не имеет никакого oauth_verifier. Я попытался разделить его на несколько методов, но до сих пор я не могу получить oauth_verifier из параметров URL, хотя он явно там, после возвращения из диалогового окна авторизации LinkedIn.

Любые предложения о том, как правильно получить этот верификатор или как заставить Scribe работать с JSF?

ответ

1

Вы как-то ожидаете, что перенаправленный запрос волшебным образом вернется в точно такое же место в коде и продолжит оттуда. Это неверно. Это фактически два HTTP-запроса. Вы в основном все еще играете в карте параметров запроса (тот, который вызвал метод generateFromLinkedIn()).

После того, как вы позвоните redirect(), вы должны вернуться из метода. Вы должны переместить оставшуюся часть кода в @PostConstruct или <f:viewAction> бэкэн-бобов, привязанных к linkedIn.xhtml. Это тот, который вызван с параметром.

+0

Спасибо BalusC, перемещая остаток кода в @PostConstruct бэк-компонента. Я ценю вашу помощь! – greenJavaDev

+0

Добро пожаловать. – BalusC

Смежные вопросы