无法从WebLogic配置中检索密码

时间:2016-03-14 09:34:16

标签: weblogic weblogic12c

我在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.

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

还有什么可能是错的?

提前致谢。

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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);
   }

答案 2 :(得分:0)

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

(其中WEBLOGIC是Weblogic控制台中具有管理员权限的用户的名称,默认管理员帐户甚至命名为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>

答案 3 :(得分:0)

我有类似的情况,我的球衣代码需要在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>