我已经定义了一个扩展UserAuthenticationSecurityCheck class
的UserLogin安全检查。一旦用户通过身份验证,我需要在protected AuthenticatedUser createUser()
函数中创建用户时设置一些属性,以便稍后将其用作Java适配器中的标头。
我的问题是我无法从@OAuthSecurity(scope = "UserLogin")
保护的适配器资源中获取活动用户信息。
我已经尝试在我的securitycheck中定义以下函数:
public AuthenticatedUser getUser() {
return authorizationContext.getActiveUser();
}
然后从适配器调用它:
UserLogin userLogin;
logger.info("Logging info message..."+userLogin.getUser().getId());
但它返回一个空指针异常。
我如何从Java Adapters获取活动用户信息?
答案 0 :(得分:3)
AdapterSecurityContext类提供适配器REST调用的安全上下文。
在Java适配器类中,在类级别添加以下内容:
@Context
AdapterSecurityContext securityContext;
然后您可以使用以下方式获取当前的AuthenticatedUser:
AuthenticatedUser currentUser = securityContext.getAuthenticatedUser();
您可以在ResourceAdapter示例中找到一个示例(在交易点下)。
答案 1 :(得分:0)
您可以在UserLogin安全级别的protected AuthenticatedUser createUser()
函数中设置属性:
private Map<String, Object> attributes = new HashMap<String, Object>();
@Override
protected AuthenticatedUser createUser() {
return new AuthenticatedUser(userId, displayName, this.getName(),attributes);
}
您可以使用以下网址获取ResourceAdapter class中的有效用户信息:
@Context
AdapterSecurityContext securityContext;
public String getActiveUser(){
AuthenticatedUser currentUser = securityContext.getAuthenticatedUser();
return "Active user informations are:" +currentUser.getDisplayName()+" "+currentUser.getAuthenticatedBy()+" "+currentUser.getAttributes()+ " "+currentUser.getAuthenticatedAt();
}
点击此处了解与Class AuthenticatedUser相关的更多信息。