2016-03-14 73 views
0

找回密碼,我在部署在WebLogic 12.2.1 Web服務下面的代碼。它將從WebLogic配置中檢索密鑰庫文件名和密碼。無法從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. 

在域的安全性下,我已經啓用了「啓用清除文本憑據訪問」。

還有什麼可能是錯誤的?

在此先感謝。

回答

0

您沒有傳遞任何用戶名在你的代碼。使用weblogic用戶或其他管理員用戶,您應該檢索密碼。否則,它不會允許您訪問密碼。

如果你想使用一些其他的用戶比的WebLogic然後確保你的用戶添加到管理員組。

+0

在WebLogic服務器啓動爲使用具有管理員權限的Windows登錄ID的服務(可以稱之爲ID 「X」) 。要登錄WebLogic控制檯,我使用了一個ID(我們稱這個ID爲「Y」)。是我需要在我的代碼「Y」中傳遞的用戶名,是否可以登錄WebLogic控制檯的相同ID?我如何在我的代碼中這樣做? – user3573403

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

我需要訪問我的代碼中的密鑰庫,所以我需要獲取密碼。我沒有在密碼中硬編碼密碼,而是想到從Weblogic配置中檢索密碼。現在,您的建議是代碼中對代碼中的weblogic密碼進行硬編碼。它似乎並沒有解決我沒有對密碼進行硬編碼的問題。 – user3573403

+0

你想要檢索密鑰庫或Weblogic域的密碼嗎? –

+0

我正在嘗試使用代碼檢索密鑰存儲區密碼。但爲此,我需要現在檢索weblogic密碼。密碼中不允許硬編碼。您正在對代碼中的weblogic密碼進行硬編碼。 – user3573403

0

我認爲您沒有通過身份驗證,因此無法訪問受限制的資源。在您的類中添加註釋@RunAs(「WEBLOGIC」)並將其配置到WEB-INF/weblogic-ejb-jar.xml中(其中WEBLOGIC是Weblogic控制檯中具有管理員權限的用戶的名稱,默認的管理員帳戶甚至名爲weblogic)

你的類應該是這樣的:在weblogic-ejb-jar.xml中的

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

內容

<?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> 
+0

如果我的weblogic用戶名是「wlsadm」,那我該怎麼做?我應該爲@RunAs指定「wlsadm」還是WEBLOGIC?那麼weblogic-ejb-jar.xml呢? – user3573403

+0

只需用wlsadm替換「weblogic」即可(所有事件都易於閱讀)。 weblogic-ejb-jar.xml應位於您的WEB-INF文件夾中,如果不創建它的話。應用程序只需要知道要使用哪個角色。既然你使用WebService,你有一個Web應用程序,對吧? – Slettal

+0

我終於今天嘗試了您的解決方案,但它仍然無法正常工作。我的weblogic管理標識是「wlsysad」。我建議您將@RunAs(「wlsysad」)放在Web服務類的頂部。然後我按照您的建議使用內容創建了WEB-INF \ weblogic-ejb-jar.xml。對於,我將這兩個值都設置爲「wlsysad」。 – user3573403

0

我有一個類似CA se,我的澤西島代碼需要通過編程方式在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>