WSSubject.getCallerPrincipal() 如何在 Java EE 应用程序中提取已登录的用户数据?
How does WSSubject.getCallerPrincipal() extract a logged in user data in Java EE application?
我是 Java EE 应用程序的新手。我正在处理遗留项目迁移任务之一,同时我需要了解身份验证机制在应用程序中的工作方式。它使用 IBM OpenLiberty 服务器。根据文档,它结合使用了 Webseal 和 LDAP。但我不清楚身份验证过程。我有一个 class,其中调用了一个方法 WSSubject.getCallerPrincipal()
并将 userId 作为字符串获取。但是我无法了解它从哪里获取这些用户详细信息以及它如何与 LDAP 通信以获取这些用户详细信息。
任何方向将不胜感激。
如果您的用户注册表配置正确并使用服务器基础架构,您将在 server.xml
文件中找到它,例如:
<feature>ldapRegistry-3.0</feature> <== this enables ldap feature
<!-- this is sample config for TDS -->
<ldapRegistry baseDN="o=acme.com" host="ldap.acme.com"
ldapType="IBM Tivoli Directory Server" port="389" realm="AcmeLdap"
bindDN="cn=testuser,o=acme.com" bindPassword="mypassword">
<idsFilters
groupFilter="(&(cn=%v)(objectclass=groupofnames))"
userFilter="(&(objectclass=inetorgperson)(|(uid=%v)(mail=%v)))" />
</ldapRegistry>
在这种情况下,LDAP 功能中包含的 类 负责管理与您的 LDAP 的连接
您可以在此处找到有关使用 OpenLiberty 设置各种 LDAP 的更多详细信息 - LDAP User Registry 3.0
如果您的应用程序使用的是自行开发的安全框架,不幸的是您必须深入研究并完全理解它包含的所有库。
更新
如果您从 WebSphere 迁移并且您的应用程序正在使用 JEE 安全角色,您可能需要创建用户 <-> 角色映射,除非它们已经在绑定文件中定义 (ibm-application-bnd.xml
)。
点击这里了解详情:Configuring authorization for applications in Liberty
简而言之:
- 添加
<feature>appSecurity</feature>
- 检查您是否在 EAR 中 -
ibm-application-bnd.xml
- 如果没有,在旧的 WebSphere 环境中,查看控制台中的“用户到角色映射”,并重新创建类似于
server.xml
中的应用程序绑定:
<application type="war" id="myapp" name="myapp" location="${server.config.dir}/apps/myapp.war">
<application-bnd>
<security-role name="user">
<group name="students" />
</security-role>
<security-role name="admin">
<user name="gjones" />
<group name="administrators" />
</security-role>
<security-role name="AllAuthenticated">
<special-subject type="ALL_AUTHENTICATED_USERS" />
</security-role>
</application-bnd>
</application>
我是 Java EE 应用程序的新手。我正在处理遗留项目迁移任务之一,同时我需要了解身份验证机制在应用程序中的工作方式。它使用 IBM OpenLiberty 服务器。根据文档,它结合使用了 Webseal 和 LDAP。但我不清楚身份验证过程。我有一个 class,其中调用了一个方法 WSSubject.getCallerPrincipal()
并将 userId 作为字符串获取。但是我无法了解它从哪里获取这些用户详细信息以及它如何与 LDAP 通信以获取这些用户详细信息。
任何方向将不胜感激。
如果您的用户注册表配置正确并使用服务器基础架构,您将在 server.xml
文件中找到它,例如:
<feature>ldapRegistry-3.0</feature> <== this enables ldap feature
<!-- this is sample config for TDS -->
<ldapRegistry baseDN="o=acme.com" host="ldap.acme.com"
ldapType="IBM Tivoli Directory Server" port="389" realm="AcmeLdap"
bindDN="cn=testuser,o=acme.com" bindPassword="mypassword">
<idsFilters
groupFilter="(&(cn=%v)(objectclass=groupofnames))"
userFilter="(&(objectclass=inetorgperson)(|(uid=%v)(mail=%v)))" />
</ldapRegistry>
在这种情况下,LDAP 功能中包含的 类 负责管理与您的 LDAP 的连接
您可以在此处找到有关使用 OpenLiberty 设置各种 LDAP 的更多详细信息 - LDAP User Registry 3.0
如果您的应用程序使用的是自行开发的安全框架,不幸的是您必须深入研究并完全理解它包含的所有库。
更新
如果您从 WebSphere 迁移并且您的应用程序正在使用 JEE 安全角色,您可能需要创建用户 <-> 角色映射,除非它们已经在绑定文件中定义 (ibm-application-bnd.xml
)。
点击这里了解详情:Configuring authorization for applications in Liberty
简而言之:
- 添加
<feature>appSecurity</feature>
- 检查您是否在 EAR 中 -
ibm-application-bnd.xml
- 如果没有,在旧的 WebSphere 环境中,查看控制台中的“用户到角色映射”,并重新创建类似于
server.xml
中的应用程序绑定:
<application type="war" id="myapp" name="myapp" location="${server.config.dir}/apps/myapp.war">
<application-bnd>
<security-role name="user">
<group name="students" />
</security-role>
<security-role name="admin">
<user name="gjones" />
<group name="administrators" />
</security-role>
<security-role name="AllAuthenticated">
<special-subject type="ALL_AUTHENTICATED_USERS" />
</security-role>
</application-bnd>
</application>