2012-03-07 53 views
2

我正在開發一個Spring Java salesforce應用程序,並使用Database SDK 22.0.8-BETA和OAuth 2.0來驗證用戶登錄。基本上使用Salesforce作爲身份提供者並獲得連接以使用Salesforce中的數據。我碰到了什麼似乎是OAuth SDK問題。OAuth ForceServiceConnector允許訪問任何Salesforce用戶的同一連接

我的情況如下:

對於第一個用戶它工作得很好,他得到的OAuth令牌,重定向到應用頁面,並連接到組織所有的偉大工程! 現在的問題!獲取第二個瀏覽器會話並嘗試使用不同的ORG上的不同用戶登錄到相同的應用程序,OAuth再次運行並讓第二個用戶進入應用程序,但此用戶現在與用戶#1具有相同的連接,因此它們共享SDK提供的相同連接儘管它們來自完全不同的ORG。我必須在Spring或安全配置中丟失一些簡單的東西,使2個用戶連接到不同的組織,並獲得單獨的連接。我嘗試了很多不同的設置,ForceServiceConnector始終將第一個初始認證用戶的連接返回給所有傳入會話,無論它們來自哪裏,它是什麼瀏覽器或它是什麼用戶。因此,任何擁有Salesforce用戶ID的人都會根據其用戶身份驗證始終獲得相同的#1用戶連接,而不是自己的ORG連接。

任何人都知道這個問題或者如何配置這個SDK的Spring Security來允許用戶通過OAuth獲得他們的單獨連接?

我使用此代碼在控制器獲取用戶信息:

@Controller 
public class HomeController { 
    @Inject 
    ForceServiceConnector oauth_app_connector; 

@RequestMapping(value="/", method=RequestMethod.GET) 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException, ConnectionException { 
    uid = oauth_app_connector.getConnection().getUserInfo().getUserName(); 

...........

希望有人這樣做或已經解決了這個可以點我正確的方向。

回答

2

ForceServiceConnector僅用於讀取已配置的連接。所以你每次都會得到你在連接URL中配置的任何用戶名。

而是使用了採用ForceSecurityContext獲取用戶登錄用的OAuth:

SecurityContext sc = ForceSecurityContextHolder.get(false); 

更多信息: http://forcedotcom.github.com/java-sdk/retrieve-user-data

可以發現,使用該打顫振API一個完整的示例作爲登錄用戶在這裏: https://github.com/jsimone/chatterToDo/blob/master/src/main/java/com/force/sample/service/ChatterService.java

相關問題