2014-07-08 123 views
0

此代碼僅適用於用戶。 我正在尋找讓多個用戶做到這一點的方式。是否可以在Web服務器上保存用戶會話?

請給我一些提示。

要運行批處理作業,我知道應該刪除一些變量(is_authorized,requestToken和accessToken)。我嘗試使用spring-social-tumblr(在github上),但使用ConnectionRepository並不容易。所以我試圖使用路標。

用路標籤名後,如何設置多用戶的用戶訪問令牌?

使用OAuthConsumer類是否正確?

@Controller 
public class TumblrProfileController { 
    private OAuthService service; 
    private Token requestToken; //should be removed for multiuser 
    private Token accessToken; // same above 

    private static final String PROTECTED_RESOURCE_URL = "http://api.tumblr.com/v2/user/info"; 

    @Autowired 
    private JobLauncher jobLauncher; 

    @Autowired 
    private Job job; 

    @Inject 
    private ConnectionRepository connectionRepository; 
    Logger log = LoggerFactory.getLogger(this.getClass()); 
    private boolean is_authorized = false; 



    @RequestMapping(value = "/tumblr/webrequest", method = RequestMethod.GET) 
    public String home(OAuthConsumer user, Model model) { 



     final String PROTECTED_RESOURCE_URL = "http://api.tumblr.com/v2/user/info"; 
     service = new ServiceBuilder().provider(TumblrApi.class).apiKey("clientKey")     .apiSecret("secretKey").callback("http://localhost:8080/pen/tumblr/login").build(); 

     log.info("Fetching the Request Token..."); 

     // Obtain the Request Token 
     requestToken = service.getRequestToken(); 
     log.info("Now go and authorize Scribe here:"); 
     String redirectUrl = service.getAuthorizationUrl(requestToken); 
     log.info(redirectUrl); 
     return "redirect:" + redirectUrl; 
    } 

    @RequestMapping(value = "/tumblr/login", method = RequestMethod.GET) 
    public String login(@RequestParam(required = false) final String oauth_verifier) { 
     Verifier verifier = new Verifier(oauth_verifier); 

     // Trade the Request Token and Verfier for the Access Token 
     log.info("Trading the Request Token for an Access Token..."); 
     accessToken = service.getAccessToken(requestToken, verifier); 
     log.info("Got the Access Token!"); 
     log.info("(if your curious it looks like this: " + accessToken + ")"); 
     // Now let's go and ask for a protected resource! 
     log.info("Now we're going to access a protected resource..."); 
     OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); 
     service.signRequest(accessToken, request); 
     Response response = request.send(); 
     log.info("Got it! Lets see what we found..."); 
     log.info(response.getBody()); 
     log.info("Thats it man! Go and build something awesome with Scribe! :)"); 
     run(); 
     is_authorized = true; 
     return "tumblr/feed"; 
    } 
    public void run() { 

     try { 
      if(! is_authorized) return; 

      OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); 
      service.signRequest(accessToken, request); 
      Response response = request.send(); 
      log.info("[2nd Call ]Got it! Lets see what we found..."); 
      log.info(response.getBody()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
+0

尊敬的編輯。請不要修改「源代碼」。這可能會帶來另一個問題。 – user3139530

回答

0

雖然我沒有用彈簧社會的tumblr(這是一個以社區爲主導的項目),這個過程應該不會有太大(或)不同於使用Spring社會與Facebook或Twitter。

請注意,在此代碼中,您正在做太多工作。您將很難重定向到Tumblr進行授權,然後處理重定向以交換請求令牌和驗證者以獲取訪問令牌。當然,這些事情必須完成,但與春季社會絕對沒有理由爲什麼必須做的事情。這就是ConnectController的用途。 ConnectController可以處理所有這些事情,創建並保持連接,並且(通常來說)您不需要直接使用OAuth進行操作。而且,與多個用戶一起工作也沒有問題。

我可以推薦你看一看https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase上的Spring Social Showcase示例來看看它是如何完成的嗎?這個例子與Facebook,Twitter和LinkedIn聯繫在一起,但沒有理由不能以同樣的方式連接到Tumblr。對於使用Spring Boot和自動配置的更簡單的方法,您可能還會看到https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-boot。 (但是請注意,Spring Boot沒有Tumblr的自動配置,因此仍然需要一些手動配置。)

+0

非常感謝。我試圖保存批處理作業的會話。有兩個問題。一個是,社交tumblr與spring-social-showcase-xml不匹配。即使我使jsp視圖文件和攔截器與facebook一樣。它只是返回「social_authorization_error」 – user3139530

+0

感謝您在社交框架方面的工作,我試圖將Connection Contoller與原始來源一起使用。完成這份工作後,我會在這裏發佈自我解決方案。 – user3139530

相關問題