【问题标题】:Unable to retrieve passwords from WebLogic configuration无法从 WebLogic 配置中检索密码
【发布时间】:2016-03-14 09:34:15
【问题描述】:

我在 WebLogic 12.2.1 上部署的 Web 服务中有以下代码。它将从 WebLogic 配置中检索密钥库文件名和密码。

    InitialContext ic = new InitialContext();
    MBeanServer server = (MBeanServer) ic.lookup("java:comp/env/jmx/runtime");
    ObjectName runtime = new ObjectName("com.bea:Name=MLMAppSrv01,Type=Server");
    Object keyStoreFileName = server.getAttribute(runtime, "CustomIdentityKeyStoreFileName");
    Object keyStorePassPhrase = server.getAttribute(runtime, "CustomIdentityKeyStorePassPhrase");

它可以检索密钥库文件名,但是当它尝试检索密码时,会抛出以下异常。

[Management:141302]Access not allowed for Subject: principals=[], on resource Server, action: read, target CustomIdentityKeyStorePassPhrase.

在域的安全下,我已经启用了“启用明文凭据访问”。

还有什么问题?

提前致谢。

【问题讨论】:

    标签: weblogic weblogic12c


    【解决方案1】:

    您没有在代码中传递任何用户名。使用 weblogic 用户或其他一些管理员用户,您应该检索密码。否则将不允许您访问密码。

    如果您想使用 weblogic 以外的其他用户,请确保将该用户添加到管理员组。

    【讨论】:

    • WebLogic 服务器使用具有管理员权限的 Windows 登录 ID 作为服务启动(让我们将此 ID 称为“X”)。为了登录 WebLogic 控制台,我使用了一个 ID(我们将这个 ID 称为“Y”)。我需要在我的代码“Y”中传递的用户名是否与我可以登录 WebLogic 控制台的 ID 相同?如何在我的代码中这样做?
    【解决方案2】:

    您可以传递下面示例代码中给出的凭据。

    Hashtable properties = new Hashtable();
       properties.put(Context.INITIAL_CONTEXT_FACTORY,
                      "weblogic.jndi.WLInitialContextFactory");
       // NOTE: The port number of the server is provided in the next line,
       //       followed by the userid and password on the next two lines.
       properties.put(Context.PROVIDER_URL, "t3://localhost:9001");
       properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
       properties.put(Context.SECURITY_CREDENTIALS, "welcome1");
       try {
           ctx = new InitialContext(properties);
       } catch (NamingException ne) {
           ne.printStackTrace(System.err);
           System.exit(0);
       }
    

    【讨论】:

    • 我需要访问我的代码中的密钥库,因此我需要获取密码。我没有在我的代码中硬编码密码,而是想从 Weblogic 配置中检索它。现在您的建议是在代码中硬编码 weblogic 密码。它似乎没有解决我没有硬编码密码的问题。
    • 您是否尝试检索密钥库或 Weblogic 域的密码?
    • 我正在尝试使用代码检索密钥库密码。但要这样做,我现在需要检索 weblogic 密码。代码中不允许对密码进行硬编码。您正在代码中硬编码 weblogic 密码。
    • 在执行或从用户读取密码时,将其作为参数传递,而不是硬编码密码。
    • 感谢您的宝贵时间。让我解释。我的代码必须在 Web 服务的生产环境中工作。所有密码都安全存储(例如密钥库),程序都不知道它们。由于我的代码在 Web 服务中工作,因此没有用户干预,也不可能。如果我能够传递密码,我会首先传递密钥库密码。
    【解决方案3】:

    我认为您未通过身份验证,因此无法访问受限资源。将注解@RunAs("WEBLOGIC") 添加到您的类中并在WEB-INF/weblogic-ejb-jar.xml 中进行配置

    (其中WEBLOGIC是Weblogic控制台中具有管理员权限的用户名,默认的Admin Account甚至命名为weblogic)

    你的班级应该是这样的:

    @Stateless
    @RunAs("WEBLOGIC")
    public class SomeService {
    // ...
    }
    

    weblogic-ejb-jar.xml 的内容

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-ejb-jar>
       <run-as-role-assignment>
         <role-name>WEBLOGIC</role-name>
         <run-as-principal-name>weblogic</run-as-principal-name>
       </run-as-role-assignment>
    </weblogic-ejb-jar>
    

    【讨论】:

    • 如果我的weblogic用户名是“wlsadm”,那我放什么?我应该为@RunAs 指定“wlsadm”还是 WEBLOGIC?那么 weblogic-ejb-jar.xml 呢?
    • 只需将“weblogic”替换为 wlsadm 即可(为了便于阅读所有出现的情况)。 weblogic-ejb-jar.xml 应该在您的 WEB-INF 文件夹中,如果没有创建它。应用程序只需要知道要使用哪个角色。既然您使用的是 WebService,那么您就有了一个 Web 应用程序,对吧?
    • 我今天终于尝试了您的解决方案,但仍然无法正常工作。我的 weblogic 管理 ID 是“wlsysad”。我按照您的建议将 @RunAs("wlsysad") 放在 Web 服务类的顶部。然后我按照您的建议创建了 WEB-INF\weblogic-ejb-jar.xml 内容。对于 ,我将这两个值都设为“wlsysad”。
    • 其实有两个@RunAs注解。一个来自 javax.annotation.security.RunAs。另一个来自 weblogic.jws.security.RunAs,它已被弃用。我正在使用 javax.annotation.security.RunAs.
    • javax.annotation.security.RunAs 是正确的。你仍然得到同样的例外吗?如果是,您的 bean 必须是 ejb bean。这就是为什么我的示例有 @Stateless (from javax.ejb.Stateless) 注解。
    【解决方案4】:

    我有一个类似的情况,我的球衣代码需要在 WLS 中以编程方式从密钥库中获取密钥。不需要 EJB 设置。您只需正确定义 web.xml 和 weblogic.xml。

    web.xml:

    <servlet>
        <servlet-name>{jersey webservice class}</servlet-name>
        <run-as>
            <role-name>admRole</role-name>
        </run-as>        
    </servlet>
    
    <security-role>
        <role-name>admRole</role-name>
    </security-role>
    

    weblogic.xml:

    <run-as-role-assignment>
        <role-name>admRole</role-name>
        <run-as-principal-name>wlsadm</run-as-principal-name>
    </run-as-role-assignment> 
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2011-01-11
      • 1970-01-01
      • 2019-01-28
      • 2019-04-08
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多