如何使用Scribe和JSF连接到LinkedIn API?

如何使用Scribe和JSF连接到LinkedIn API?,jsf,oauth,linkedin,scribe,Jsf,Oauth,Linkedin,Scribe,基于,我试图授权我的应用程序使用LinkedIn的api 以下是我的当前代码,它与按钮单击关联: public String generateFromLinkedIn() { OAuthService service = new ServiceBuilder() .provider(LinkedInApi.class) .apiKey(apiKey) .apiSecret(apiSecret) .callback("

基于,我试图授权我的应用程序使用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 "";
}
public String generateFromLinkedIn(){
OAuthService=newServiceBuilder()
.provider(LinkedInApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback(“http://localhost:8080/Project/faces/linkedIn.xhtmlbuild();
ExternalContext ExternalContext=FacesContext.getCurrentInstance()
.getExternalContext();
Token requestToken=service.getRequestToken();
字符串authUrl=service.getAuthorizationUrl(requestToken);
试一试{
重定向(authUrl);
}捕获(IOEX异常){
Logger.getLogger(LinkedInController.class.getName()).log(Level.SEVERE,null,ex);
}
Map parameterMap=(Map)externalContext.getRequestParameterMap();
验证器v=新验证器(参数map.get(“oauth_验证器”);
令牌accessToken=service.getAccessToken(requestToken,v);
OAuthRequest=新的OAuthRequest(动词.GET)https://api.linkedin.com/v1/people/~");
signRequest(accessToken,request);
Response=request.send();
System.err.println(response.getBody());
返回“”;
}
在我的.xhtml页面中,我有:

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

在我尝试从参数映射中获取验证器之前,一切都正常,该参数映射没有任何oauth_验证器。我尝试将其拆分为多个方法,但到目前为止,我无法从URL参数中获取oauth_验证器,即使它在从LinkedIn授权对话框返回后明显存在


关于如何正确获取这个验证器或者如何使Scribe与JSF一起工作,有什么建议吗

您似乎希望重定向的请求神奇地返回到代码中完全相同的位置,并从那里继续。这是不真实的。它实际上是两个HTTP请求。您基本上仍然在摆弄当前请求的参数映射(调用
generateFromLinkedIn()
方法的参数映射)


调用
redirect()
后,应该从该方法返回。您应该将代码的其余部分移动到绑定到
linkedIn.xhtml
的支持bean的
@PostConstruct
。就是用参数调用它的人。

谢谢BalusC,将代码的其余部分移动到支持bean的@PostConstruct中起了作用。我感谢你的帮助!