首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JMX + J2SE 5.0 實現 Web 應用安全管理實戰

     編輯:Java 相關知識

JMX (Java Management Extensions) 提供工具管理本地/遠端應用程式、系統物件、裝置。本文解釋如何使用 JMX (JSR 160) 遠端控制 Web 應用,展示應用程式中可供 JMX Client 使用的代碼,並示範 MC4J、jManage 等 Client 如何連線至支援 JMX 的應用。深入討論使用 RMI 協定與 JNDI 保護通訊層。

建置範例應用程式

  1. 下載範例應用,執行 ant war 建立 WAR 檔。
  2. 將 jmxapp.war 複製至 Tomcat webapps 目錄。
  3. 假設 Tomcat 埠 8080,應用網址:https://localhost:8080/jmxapp。
  4. 出現登入畫面(帳號 hello、密碼 world)即就緒。

需求:J2SE 5.0 SDK、支援 Servlet 容器 (Tomcat 5.5.12)、Apache Ant。

追蹤有意義的資料

應用使用 Struts 處理登入表單。LoginAction.execute() 驗證帳密,成功導向 login_success.jsp,失敗返回表單。根據結果呼叫 incrementSuccessLogins() 或 incrementFailedLogins(),將計數儲存在 ServletContext 屬性中。

建立 JMX MBeans

定義 LoginStatsMBean 介面暴露兩個方法:

public interface LoginStatsMBean {
    public int getFailedLogins();
    public int getSuccessLogins();
}

實作類別 LoginStats 從 ServletContext 讀取計數值。

建立與保護 JMX Agent

JMXAgent 類別職責:

  1. 建立 MBeanServer
  2. 註冊 LoginStatsMBean
  3. 建立 JMXConnector 允許遠端連線(含 JNDI、RMI Registry)
  4. 使用帳號密碼保護 JMXConnector
  5. 應用啟動/停止時啟動/停止 Connector

建立 MBeanServer 並註冊 MBean

MBeanServer server = MBeanServerFactory.createMBeanServer(DOMAIN);
server.registerMBean(new LoginStats(), new ObjectName(DOMAIN + ":name=LoginStats"));

建立 JMXServiceURL

JMXServiceURL url = new JMXServiceURL("rmi", null,
    Constants.MBEAN_SERVER_PORT,
    "/jndi/rmi://localhost:" + Constants.RMI_REGISTRY_PORT + "/jmxapp");

參數:協定、主機、連接埠、URL 路徑(含 JNDI 查詢指示、RMI Registry 位置、服務名稱)。產生的連線字串如:service:jmx:rmi://zarar:9589/jndi/rmi://localhost:1100/jmxapp。

保護服務:帳號密碼驗證

建立文字檔儲存帳密(每行:username password)。在 Map 中設定 jmx.remote.x.password.file 指向此檔案,傳給 JMXConnectorServerFactory:

Map<String, String> env = new HashMap<>();
env.put("jmx.remote.x.password.file", userFile);
connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, env, server);

透過 connectorServer.start() / stop() 控制服務。

啟動 RMI Registry

程式化啟動:

registry = LocateRegistry.createRegistry(Constants.RMI_REGISTRY_PORT);

停止時:

UnicastRemoteObject.unexportObject(registry, true);

由 StartupListener 觸發應用啟動/結束任務。

存取 JMX 服務

使用 MC4J 連線

  1. 部署 jmxapp.war 至 Tomcat。
  2. 下載安裝 MC4J,建立 JSR 160 類型伺服器連線,輸入啟動日誌顯示的服務 URL。
  3. 提供帳密(MC4J 稱 Principal / Credentials)。
  4. 瀏覽樹狀結構找到 LoginStats MBean 的 Properties,即可看到統計數值。

MC4J 視圖 屬性視窗

使用 jManage 監控叢集

  1. 部署第二個應用實例(修改埠號、Context Path 為 jmxapp2)。
  2. 安裝 jManage,透過 Web 介面建立兩個 JSR 160 應用。
  3. 建立叢集並加入兩應用。
  4. 點擊叢集視圖,即可同時看到兩實例的登入統計。

新增應用頁面 新增應用叢集頁面 叢集視圖

結語

您已學會讓新舊 Web 應用支援 JMX 並安全管理,使用 MC4J 與 jManage。J2SE 5.0 提供強健的 JMX 實作,開源專案如 XMOJO、MX4J 提供額外功能(如 Web 介面連線)。進階閱讀推薦:J. Steven Perry 《Java Management Extensions》、Jeff Hanson 《Connecting JMX Clients and Servers》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved