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="(&amp;(cn=%v)(objectclass=groupofnames))"
            userFilter="(&amp;(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>