2015-05-28 3 views
0

Я новичок в Spring, и я хочу войти в приложение Spring MVC. С LinkedIn, Я использую SCRIBE для входа в систему, но когда я запускаю приложение, он генерирует исключение.Интеграция входа в LinkedIn с Spring MVC web Application

Мой код контроллера для LinkedIn в MVC, как:

@RequestMapping(value="/loginlinkedin", method=RequestMethod.GET) 
    public String callback(WebRequest request){ 

     OAuthService service=linkedInServiceProvider.getService(); 
     System.out.println("above request token"); 
     //request token 
     Token requestToken=service.getRequestToken(); 

     System.out.println(requestToken); 
     System.out.println("below request token"); 

     //getting authorized url 
     String oauth_verif= service.getAuthorizationUrl(requestToken); 
     System.out.println(oauth_verif); 

     //verifing the requested token 
     Verifier verifier=new Verifier(in.nextLine()); 
     System.out.println("below verifier"+verifier); 

     //get AccessToken 
     Token accessToken=service.getAccessToken(requestToken, verifier); 
     System.out.println("access tolen"+accessToken); 


     OAuthRequest oauthRequest=new OAuthRequest(Verb.GET, "http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry,headline)"); 
     System.out.println("outhrequest"+oauthRequest); 
     service.signRequest(accessToken, oauthRequest); 
     Response outhResponse=oauthRequest.send(); 
     System.out.println(outhResponse.getBody()); 
     //ModelAndView mav=new ModelAndView("redirect:loginPage"); 
     return "result"; 
    } 

и бобы для связанного входа:

<bean id="linkedInServiceProvider" class="com.spring.handler.OAuthServiceProvider"> 
    <constructor-arg name="oauthServiceConfig" ref="linkedInServiceConfig" /> 
</bean 

И OAuthServiceConfig класс для конфигурации службы :

package com.spring.handler; 
import org.scribe.builder.api.Api; 
public class OAuthServiceConfig { 
private String apiKey; 
private String apiSecret; 
private String callback; 
private Class apiClass; 

public OAuthServiceConfig(String apiKey,String apiSecret,String callback,Class apiClass){ 
    super(); 
    this.apiKey=apiKey; 
    this.apiSecret=apiSecret; 
    this.callback=callback; 
    this.apiClass=apiClass; 
    System.out.println(apiKey+apiSecret+callback+apiClass); 
} 

public String getApiKey() { 
    return apiKey; 
} 

public void setApiKey(String apiKey) { 
    this.apiKey = apiKey; 
} 

public String getApiSecret() { 
    return apiSecret; 
} 

public void setApiSecret(String apiSecret) { 
    this.apiSecret = apiSecret; 
} 

public String getCallback() { 
    return callback; 
} 

public void setCallback(String callback) { 
    this.callback = callback; 
} 

public Class getApiClass() { 
    return apiClass; 
} 

public void setApiClass(Class apiClass) { 
    this.apiClass = apiClass; 
} 



} 

и OAuthServiceProvider класса для предоставления услуг для OAuthService использования linkedInServiceProvider.getService() метода:

package com.spring.handler; 

import org.scribe.builder.ServiceBuilder; 
import org.scribe.oauth.OAuthService; 

public class OAuthServiceProvider { 
    OAuthServiceConfig oauthServiceConfig; 

    public OAuthServiceProvider() { 
    } 

    public OAuthServiceProvider(OAuthServiceConfig oauthServiceConfig) { 
     this.oauthServiceConfig = oauthServiceConfig; 
    } 

    public OAuthService getService() { 
     System.out.println(oauthServiceConfig); 
     return new ServiceBuilder().provider(oauthServiceConfig.getApiClass()) 
       .apiKey(oauthServiceConfig.getApiKey()) 
       .apiSecret(oauthServiceConfig.getApiSecret()) 
       .callback(oauthServiceConfig.getCallback()).build(); 
    } 
} 

Но при входе в приложение, исключение брошено является:

May 28, 2015 5:42:17 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [HelloWebHandler] in context with path [/SpringHandler] threw exception [Request processing failed; nested exception is org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: 'oauth_problem=permission_unknown'] with root cause 
org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: 'oauth_problem=permission_unknown' 
    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41) 
    at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27) 
    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:104) 
    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:85) 
    at org.scribe.oauth.OAuth10aServiceImpl.getAccessToken(OAuth10aServiceImpl.java:90) 
    at com.spring.handler.UserController.callback(UserController.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
+0

Возможное дублирование http://stackoverflow.com/questions/29755678/apache-oltu-linkedin-integration-example – Ranjitsinh

ответ

0

permission_unknown: Пользователь не решил разрешить ли Этот пользователь получает доступ к защищенным ресурсам. Обычно происходит, когда пользователь запрашивает токен доступа до того, как пользователь выполнит авторизацию .

Чтобы отслеживать и решить вашу проблему:

  • Включите режим отладки писец на выполнение debug() метода на ServiceBuilder.
  • Читайте внимательно в Getting started guide от разметочной-Явы
  • Обзора вашего кода inconsistences:
//verifing the requested token 
    Verifier verifier=new Verifier(in.nextLine()); 
    System.out.println("below verifier"+verifier); 

Что in? вы должны проверить токен запроса, похоже, что вы скопировали эту строку из примеров писцов, так или иначе трудно поверить, что ваш код работает, потому что in не объявлен.

  • Rebuild контроллер: реализовать метод аутентификации запуска первый, получить или сохранить атрибут запроса маркера и перенаправить к URL авторизации (щ э ю URL), если его требуется (service.getAuthorizationUrl()); реализовать свой метод обратного вызова (после того, как пользователь одобрил доступ к своему профилю, он перенаправляется на конечную точку обратного вызова, определенную в вашем классе OAuthServiceConfig) и получает ключ oauth_verifier и токен запроса, чтобы проверить и получить accessToken, сохранить его, подписать запрос ... и т. д. ...и т.д.
+0

никоим образом, я не копировал в любом месте, да я по тому же руководство, как вы связываете выше, На самом деле я забыл написать Scanner in = new Scanner (System.in) здесь; и когда он достигнет в Verifier verifier = new Verifier (in.nextLine()); чем, я предоставляю секретный ключ приложения LinkedIn как параметр и после его возвращения объект-верификатор. После этого, проблема .. для доступа, токен. – Sunoo

+0

в предлагаемом руководстве, что такое «верификатор, который вы получили от пользователя» в Verifier v = новый Verifier («верификатор, который вы получили от пользователя»); – Sunoo

+0

Является ли oauth_verifier переданным методу обратного вызова после проверки подлинности linkedin. – vzamanillo