2016-06-28 51 views
0

我已經定義了一個擴展UserAuthenticationSecurityCheck class的UserLogin安全檢查。一旦用戶通過驗證,我需要在protected AuthenticatedUser createUser()函數中創建用戶時設置一些屬性,以便稍後將其用作我的Java適配器中的標題。如何獲取MobileFirst 8 Java適配器中的活動用戶信息?

我的問題是我無法從我的適配器資源中獲得有效用戶信息,該資源由@OAuthSecurity(scope = "UserLogin")擔保。 我試圖在我的securitycheck定義以下功能:

public AuthenticatedUser getUser() { 

     return authorizationContext.getActiveUser(); 

    } 

,然後調用它從適配器是這樣的:

UserLogin userLogin; 
logger.info("Logging info message..."+userLogin.getUser().getId()); 

但它返回一個空指針異常。

我如何從Java Adapters獲取活動的用戶信息?

回答

2

AdapterSecurityContext類提供適配器REST調用的安全上下文。

裏面你的Java適配器類,添加以下類級別:
@Context AdapterSecurityContext securityContext;

然後可以使用獲得當前AuthenticatedUser:
AuthenticatedUser currentUser = securityContext.getAuthenticatedUser();

可以ResourceAdapter樣本中找到一個例子(根據交易 enpoint)。

+0

我也嘗試過這個選項,但我剛剛檢查過,包含在適配器@Context中的每個API,例如AdapterSecurityContext或AdaptersAPI都會在我的代碼中導致空指針異常。 –

0

您可以在用戶登陸安全類的protected AuthenticatedUser createUser()功能設置你的屬性:

@Context 
    AdapterSecurityContext securityContext; 

public String getActiveUser(){ 

AuthenticatedUser currentUser = securityContext.getAuthenticatedUser(); 

return "Active user informations are:" +currentUser.getDisplayName()+" "+currentUser.getAuthenticatedBy()+" "+currentUser.getAttributes()+ " "+currentUser.getAuthenticatedAt(); 

} 

點擊這裏查看有關的更多信息:

private Map<String, Object> attributes = new HashMap<String, Object>(); 
    @Override 
    protected AuthenticatedUser createUser() { 
     return new AuthenticatedUser(userId, displayName, this.getName(),attributes); 
    } 

可以使用得到有效的用戶信息在ResourceAdapter classClass AuthenticatedUser

相關問題