如何从JSF页面中Liberty的基于FORM的身份验证中获取用户主体?

问题描述 投票:0回答:2

所以我有这个使用基于表单的身份验证的JSF项目。在第一次打开我的JSF页面时,我被重定向到我的登录服务器。在那里进行身份验证,成功后我被重定向到我的应用程序。不幸的是,我不知道如何获取身份验证服务器提供的信息,如用户名。

我有一个页面,文字说“登录为”。应该由Managed Bean使用getCurrentUser Principal()方法设置。

<h:outputText value="#{myBean.getCurrentUserPrincipal()}"/>

该方法目前是空的。我尝试使用WSSubject.getCallerPrincipal()和FacesContext.getCurrentInstance()。getExternalContext()。getUserPrincipal()但返回null。如何通过该方法获取所需信息?它甚至可能吗?我不确定你需要什么信息,所以如果缺少某些东西,我会尽可能地提供。

jsf websphere-liberty userprincipal open-liberty
2个回答
0
投票

将主体注入托管bean,如:

@Inject
private Principal principal;

然后,基于你的输出文本字段上面的html,在你的托管bean中提供一个getter,如:

public String getCurrentUserPrincipal() {
    return principal.getName();
}

0
投票

经过一番挖掘后,我发现我们的身份验证服务器是一个siteminder服务,并且信息以cookie(SMSESSION)和响应的头信息返回。因此,读取头信息以获取用户名就足够了。

但是校长或主题仍然会返回null。为了实现这一目标并使安全工作,我向Liberty添加了一个TAI。如何做到这一点,你可以阅读herehere。我的myTAI.jar非常简单。因为我配置了ldap注册表,所以我需要给定用户名(标头)的用户安全名称(字符串,例如uid = ..,ou = ..,ou = ..)以进行进一步的身份验证并返回:

return TAIResult.create(HttpServletResponse.SC_OK, userSecName);

在后台,Liberty将进行一些进一步的身份验证并创建原则和主题。如果一切都配置正确并且用户有权进入应用程序,他将会并且将具有可用的原则和主题对象。

© www.soinside.com 2019 - 2024. All rights reserved.