| Oracle® Fusion Middleware Oracle Privileged Account Manager管理者ガイド 11gリリース2 (11.1.2) B69534-07 |
|
![]() 前 |
![]() 次 |
この章では、Oracle Privileged Account Manager用に自身のプラグインを開発する方法について説明します。
この章では、次の項目について説明します。
Oracle Privileged Account ManagerのJavaベースのプラグイン・フレームワークを使用して自身固有のビジネスおよび技術要件に対応するようにOracle Privileged Account Managerの機能を拡張するプラグインを作成できます。プラグインによって、トランザクション内にカスタム・ロジックを提供することや、カスタム・データ・ソースに接続することができます。
この項の内容は次のとおりです。
Oracle Privileged Account Managerプラグイン・フレームワークには、プラグインの実装の開発に必要なプラグイン・インタフェースおよびクラスが含まれています。このフレームワークは、次のJARファイルに付属しています。
ORACLE_HOME/opam/jlib/opam-plugin-framework.jar
このjarファイルを使用してプラグインを開発、実装およびコンパイルできます。
|
注意: Oracle Privileged Account Manager用のプラグインの開発に関する追加情報は、第11.2項「Oracle Privileged Account Manager用のプラグインの開発」を参照してください。 |
次に、プラグインの開発時に考慮する必要があるいくつかの特別な考慮事項および依存関係を示します。
プラグインの開発時にOracle Privileged Account Managerサーバー・ランタイムは必要ありませんが、このサーバー・ランタイムはデプロイメントおよびテスト目的で必要です。
Oracle Privileged Account Manager Javaプラグインを設定する手順は、次のとおりです。
事前定義済インタフェースを使用してスタンドアロンJavaプログラムを作成し、必要なメソッドを実装します。
操作の「前」または「後」のタイミングを使用してプラグインを実行できます。対応するpreプラグインまたはpostプラグイン・インタフェースを実装する必要があります。
コンパイル前に、次のjarをクラスパスに配置します。
ORACLE_HOME/opam/jlib/opam-plugin-framework.jar
プラグインJavaファイルをコンパイルし、classまたはjarファイルを作成します。コンパイルがエラーなしで完了していることを確認します。
Oracle Privileged Account Managerサーバーからアクセス可能なファイル・システムの場所にそのclassまたはjarファイルを配置します。高可用性クラスタ構成のために、個別の各ノードまたはすべてのノードからアクセス可能な共有の場所にclassまたはjarファイルを配置できます。
プラグイン構成エントリを追加することでプラグインを登録します。
|
注意:
|
classおよびjarファイルに任意の名前およびパッケージを選択できます。ただし、プラグインを登録する際は、Plug-in Class NameおよびPlug-in Class Path属性の構成時と同じ名前とパッケージを使用する必要があります。
たとえば、my.sample.OpamPluginなどの完全修飾名を使用してプラグインを作成し、それを/u01/myplugin.jarファイルにコンパイルし、かつそれが/u01/myutils.jarのいくつかのクラスに対して依存関係を持っている場合、そのプラグイン構成では次のものを使用する必要があります。
| プラグインのクラス名 | プラグインのクラスパス |
|---|---|
|
my.sample.OpamPlugin |
|
プラグイン構成が登録されて有効化された後は、起動条件が満たされるたびにサーバーによってそのプラグインが起動されます。
この項では、プラグインAPIの高度な概要、およびメイン・クラスやインタフェースの役割を説明します。
|
注意: プラグインの実装では |
この項の内容は次のとおりです。
Oracle Privileged Account Managerプラグインは、PrePluginまたはPostPluginインタフェースを使用してOracle Privileged Account Managerサーバーと通信します。プラグインの起動時には、サーバーによつてPluginContextオブジェクトが作成され、操作に関する詳細(ターゲット、アカウントなど)が、その操作によって起動されるプラグインに渡されます。また、サーバーによって、操作リクエスト本文およびプラグインを起動するプラグイン構成も、そのプラグインに渡されます。
プラグインにより、PluginResultオブジェクトが構成されます。タスクが完了すると、プラグインによりPluginResultオブジェクトがサーバーに戻されます。PluginResultオブジェクトには、成功または失敗のコード、カスタム・エラー・メッセージおよびログ・メッセージを含めることもできます。場合によっては、プラグインは詳細を変更したり、リクエスト本文に追加し、それらの詳細をサーバーに戻すこともできます。
次の図では、Oracle Privileged Account Managerのプラグインがサーバーと通信方法を示します。
Javaプラグインの一般的な構造は、次のとおりです。
preプラグインの場合
public class OPAM_PLUGIN_CLASSNAME implements PrePlugin {
public void runPrePlugin(PluginContext ctx, String reqBodyJSON, String pluginCfgJSON) {
// Plugin Code
}
}
postプラグインの場合
public class OPAM_PLUGIN_CLASSNAME implements PostPlugin {
public void runPostPlugin(PluginContext ctx, String reqBodyJSON, String pluginCfgJSON) {
// Plugin Code
}
}
|
注意: 詳細は、Oracle Privileged Account Managerプラグイン・フレームワークJava APIリファレンスを参照してください。 |
この項では、Oracle Privileged Account Managerに対して使用するプラグイン・インタフェースおよびクラスについて説明します。
この項の内容は次のとおりです。
Oracle Privileged Account Managerサーバーは、プラグインの起動中にPluginContextオブジェクトを作成し、それをそのプラグインに送信します。このオブジェクトには、次の情報が格納されます。
JSON形式のアカウント情報。getAccountJSON()メソッドを使用することで取得されます。
アカウント情報は、アカウントに関係する操作(checkinやcheckoutなど)に存在します。
アカウント情報は、ターゲットの追加や削除などアカウントに関係ない操作には存在しません。また、アカウント情報は、新しいアカウントを追加する場合も、アカウントがまだ作成されていないために存在しません。クライアントによって送信される詳細は、リクエスト本文JSONで取得できます。
|
注意: アカウント・リソースおよびそのJSON形式の詳細は、付録B「Oracle Privileged Account ManagerのRESTfulインタフェースの使用」の第B.6項「アカウント・リソース」を参照してください。 |
JSON形式のターゲット情報。getTargetJSON()メソッドを使用することで取得されます。
JSON形式のアカウント情報と同様に、ターゲット情報は、ターゲットが関係する操作にのみ存在します。
|
注意: ターゲット・リソースおよびそのJSON形式の詳細は、付録B「Oracle Privileged Account ManagerのRESTfulインタフェースの使用」の第B.5項「ターゲット・リソース」を参照してください。 |
JSON形式の操作情報。getOperationJSON()メソッドを使用することで取得されます。
このメソッドには、この操作がどのリソースに対して実行されるのか(ターゲット、アカウントなど)およびどの操作が実行されるのか(add、deleteなど)に関する情報が含まれます。次に例を示します。
{
"resourceType":"account",
"operationName":"add"
}
JSON形式の認証情報。getAuthContextJSON()メソッドを使用することで取得されます。
このメソッドには、どのユーザーが操作を実行するのかおよびそのユーザーがどのグループのメンバーなのかに関する情報が含まれます。次に例を示します。
{
"requestor":"johndoe",
"requestorGroups":["ITADMINS", "MANAGERS"]
}
この情報は、リソース・タイプserverの操作には存在しません。その操作はエンド・ユーザーではなくOracle Privileged Account Managerサーバーによって実行されるためです。
PluginResultオブジェクト。情報をサーバーに戻すためにプラグインによって作成されます。このオブジェクトはsetPluginResult()メソッドを使用して設定し、設定された値を取得するにはgetPluginResult()メソッドを使用します。
HTTPレスポンスのステータス (postプラグインのみ)。getHTTPResponseStatus()メソッドを使用することで取得されます。
postプラグインの場合に、Oracle Privileged Account ManagerサーバーREST APIベースの操作が完了すると、操作レスポンス・コード(200 OK、401 Unauthorizedなど)がプラグインに送信されます。
HTTPレスポンスのエンティティ (postプラグインのみ)。getHTTPResponseEntity()メソッドを使用することで取得されます。
postプラグインの場合に、Oracle Privileged Account ManagerサーバーREST APIベースの操作が完了すると、操作結果がプラグインに送信されます。たとえば、操作結果には、検索操作によるアカウントのリスト(JSON形式)、checkout操作によるアカウント・トークン(JSON形式)などが含まれることがあります。
HTTPレスポンスの場所→作成されたGUID (postプラグインのみ)。gettHTTPResponseLocation()→getGuid()メソッドを使用することで取得されます。
postプラグインおよびadd操作の場合に、Oracle Privileged Account ManagerサーバーREST APIベースのadd操作が完了すると、新しく作成されたエンティティのGUIDがプラグインに送信されます。このGUIDは、作成操作の場合にのみ存在します。GUIDは、ターゲットの削除、ターゲットの変更などの操作の場合には存在しません。
プラグインによってPluginResultが作成され、それを使用して、Oracle Privileged Account Managerサーバーに情報が送り返されます。
このオブジェクトを作成するために、プラグインはPluginResult(java.lang.String resultJSON,int plgErrorCode,java.lang.String plgErrorMsg)メソッドを使用します。作成後、PluginResultを、サーバーによって送信されたPluginContextに格納することで、サーバーに戻します。次に例を示します。
PluginResult result = new PluginResult(resultJSON, plgErrorCode, plgErrorMsg); ctx.setPluginResult(result);
PluginResultオブジェクトには、次の情報が含まれます。
プラグインによって変更されたリクエスト本文JSON。JSON形式の結果情報。
preプラグイン操作では、プラグインはこの情報を使用して、それに渡されたリクエスト本文JSON内の詳細を変更したり追加し、更新済コンテンツを結果JSONとして返します。サーバーは、操作を実行する前に、その結果のJSONを使用して、リクエスト本文JSONを置き換えます。
複数のpreプラグインが同じ操作に対して実行される場合、各プラグインは、それらの実行順序に基づいて更新されたリクエスト本文を取得します。最後のpreプラグインが実行された後、最終的なリクエスト本文が使用されてサーバー内でその操作が実行されます。
プラグインでリクエスト本文JSONを変更しない場合、そのままプラグイン結果JSONに渡すことができます。プラグインは、PluginResultオブジェクトの作成時にこの値を設定でき、getResultJSON()およびsetResultJSON()メソッドを使用してそれにアクセスできます。
postプラグイン操作では、プラグインはこの値を読み取ることができますが、この値を変更しても何も影響を与えません。それはその操作がすでに完了しているためです。
エラー・コード。成功(PluginResult.CODE_SUCCESS)または失敗(PluginResult.CODE_FAILURE)を指定します。
プラグインは、PluginResultオブジェクトの作成中にこの値を設定でき、getErrorCode()およびsetErrorCode()メソッドを使用してそれにアクセスできます。
エラー・メッセージ。障害発生時にエラーについて説明します。
プラグインは、任意の文字列メッセージを設定し、それをクライアントに戻すことができます。プラグインは、PluginResultオブジェクトの作成中にメッセージを設定でき、getPlgErrorMsg()およびsetPlgErrorMsg()メソッドを使用してそれにアクセスできます。
たとえば、checkout操作に対して、チェックアウト日付を検証してその地域の休日や週末などブラックリストに載せられた日におけるアカウントの使用を防止するpreプラグインを構成したとします。このプラグインはチェックアウトに対してCheckout is not allowed on holidays.などのエラー・メッセージを設定できます。この場合、checkout操作は失敗し、それにはエラー・メッセージPlug-in execution failed with error message: Checkout is not allowed on holidays.が含まれるようになります。
デバッグ・ロギング。プラグインの実行に関する情報を提供します。
プラグインは、ログ・メッセージをサーバーに送り返すことができ、それはサーバー・ログ・ファイルに記録されます。これらのログを使用して、プラグインの実行をデバッグできます。このログ・メッセージには、getLog()、appendLog(String)およびclearLog()メソッドを使用することでアクセスできます。
Oracle Privileged Account Managerの操作用のpreプラグインを作成するには、PrePluginインタフェースを実装する必要があります。PrePluginインタフェースを実装するには、次のメソッドを使用します。
void runPrePlugin(PluginContext ctx, java.lang.String reqBodyJSON, java.lang.String pluginCfgJSON)
次の情報が、runPrePluginメソッドを介してサーバーからpreプラグインに渡されます。
PluginContextオブジェクト。操作に関する詳細が格納されます。
詳細は、第16.3.3.1項「PlugInContext」を参照してください。
リクエスト本文JSON。クライアントによってOracle Privileged Account Managerに送信されるREST API操作のリクエストを提供します。
プラグインは、この情報をpreプラグイン用に変更でき、新しく更新されたJSONをPluginResultオブジェクトでサーバーに送り返すことができます。詳細は、第16.3.3.2項「PluginResult」を参照してください。
プラグイン構成。JSON形式でこの操作を起動します。
同じJavaプラグイン実装を多数の操作に使用できます。たとえば、電子メール通知を実行する同一のプラグインをcheckoutとcheckinの両方の操作に対して実行できます。
プラグイン構成がプラグインに渡されると、それによって、その構成によって起動されるプラグインに詳細が提供されます。これは、構成内に存在するカスタム属性をプラグインに渡す場合にも役立ちます。たとえば、電子メール通知の場合、プラグイン構成のカスタム属性としてメール・サーバー詳細を格納でき、それらはプラグインに渡されます。
Oracle Privileged Account Managerの操作用のpostプラグインを作成するには、PostPluginインタフェースを実装する必要があります。PostPluginインタフェースを実装するには、次のメソッドを使用します。
void runPostPlugin(PluginContext ctx, java.lang.String reqBodyJSON, java.lang.String pluginCfgJSON)
runPostPluginメソッドを介してサーバーからpostプラグインに渡される情報は、前の項で説明した情報と同じです。 第16.3.3.3項「PrePlugin」のリストを確認してください。
プラグインは、独自のログ・ファイルを保持し、そのファイルにリアルタイムで記録することが可能です。さらに、プラグインは、第16.3.3.2項「PluginResult」に示すように、PluginResultオブジェクト・デバッグ・ロギング・メソッドを使用して、実行中にOracle Privileged Account Managerサーバーのログ・ファイルにデバッグ・メッセージを記録できます。
PluginResultメソッドを使用して記録されたメッセージは、Oracle Privileged Account Managerサーバー・ログ・ファイルに格納されます。これらのメッセージを表示するには、ロギング・レベルをTRACE:32 (非常に詳細なトレースまたはデバッグ情報)に設定する必要があります。
次の例は、プラグインのロギング機能の実装に使用されるサンプル・コードを示しています。
例16-1 プラグイン・ロギングの実装に使用されるサンプル・コード
public void runPostPlugin(PluginContext ctx, String reqBodyJSON,
String pluginCfgJSON) { // the parameters are the same for runPrePlugin()
…
PluginResult result = ctx.getPluginResult(); // get the PluginResult object
from PluginContext object
result.appendLog("Here is the log"); // append log
…
// System.out.println(result.getLog()); // getLog() will return current log
// result.clearLog(); // clearLog() will remove the log that has been recorded
…
}
この項で取り上げる例は、次のとおりです。
例16-3 (この項の終わりにある)は、操作が実行される前に、指定された日付に基づいて操作をブロックするpreプラグインを示しています。
組織によっては、特権アカウントへのアクセスが許可されない日付(地域の休日、例年の休業など)が記載されたブラックリストを保持していることがあります。このpreプラグインは、検証を実行し、Oracle Privileged Account Managerの使用ポリシー機能を拡張します。
このプラグインは、次のカスタム属性を使用してブラックリストに載せられた日付を指定します。
| 属性名 | 属性値 |
|---|---|
|
date |
月/日、たとえば、10/01です。 注意:
|
このプラグインを構成するには、次の表に示す属性を使用します。
| 属性名 | 属性値 |
|---|---|
|
pluginName |
BlackListDates |
|
pluginStatus |
active |
|
pluginResource |
アカウント |
|
pluginOperation |
checkout |
|
pluginTiming |
pre |
|
pluginOrder |
1 |
|
pluginClassName |
BlackListDates |
|
pluginClassPath |
|
|
pluginCustomAttrs |
|
|
pluginTimeout |
60 |
プラグインをコンパイルする手順は、次のとおりです。
必要に応じて、次のファイルをダウンロードします。
| ダウンロード元: | ダウンロードするファイル |
|---|---|
|
ORACLE_HOME |
|
次のサンプル・コンパイル・コマンドを使用します。
javac -cp .:ORACLE_HOME/opam/jlib/opam-plugin-framework.jar: ORACLE_HOME/opam/jlib/third-party/jettison-1.3.jar: ORACLE_HOME/opam/jlib/third-party/jersey-bundle-1.4.jar: ORACLE_HOME/opam/jlib/third-party/jsr311-api.jar BlackListDates.java
JARファイルを作成します。
jar -cf BlackListDates.jar BlackListDates.class
Oracle Privileged Account Managerに対してこのプラグインを構成すると、プラグインは、date属性に基づいてユーザーによるOracle Privileged Account Managerの操作の実行をブロックします。たとえば、今日が10/01であり、date属性の1つが10/01である場合、ユーザーはこの操作を実行できません。
|
注意: 次の例では、月と日のみが必要です。年は無関係です。 |
例16-2 ブラックリストに載せられた日付のpreプラグイン
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.json.JSONStringer;
import org.codehaus.jettison.json.JSONArray;
import com.oracle.idm.opam.plugin.interfaces.PrePlugin;
import com.oracle.idm.opam.plugin.context.PluginContext;
import com.oracle.idm.opam.plugin.context.PluginResult;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class BlackListDates implements PrePlugin {
public void runPrePlugin(PluginContext ctx, String reqBodyJSON, String pluginCfgJSON){
System.out.println("===== In BlackListDates.runPrePlugin =====");
try {
JSONArray blackDates = null;
JSONObject plugin = new JSONObject(pluginCfgJSON);
JSONObject config = plugin.getJSONObject("plugin");
JSONArray customAttrsArr = new JSONArray();
if(config.has("pluginCustomAttrs"))
customAttrsArr = config.getJSONArray("pluginCustomAttrs");
for(int i=0; i<customAttrsArr.length(); i++) {
JSONObject singleJSON = customAttrsArr.getJSONObject(i);
JSONObject singleAttr = singleJSON.getJSONObject("pluginCustomAttr");
String attrName = singleAttr.getString("attrname");
if(attrName.equalsIgnoreCase("date"))
blackDates = singleAttr.getJSONArray("attrvalue");
}
for(int i=0; i<blackDates.length(); i++) {
String date = blackDates.getString(i);
String[] count = date.split("/");
if(count.length != 2) // wrong format, ignore
continue;
else {
if(isToday(date)) {
setResult(ctx, reqBodyJSON, PluginResult.CODE_FAILURE,
"You are not allowed to do the operation on this date : " + date);
return;
}
}
}
}
catch (Exception e) {
System.out.println("Exception happened: ");
e.printStackTrace();
PluginResult ret = new PluginResult(reqBodyJSON, PluginResult.CODE_FAILURE, e.getMessage());
ctx.setPluginResult(ret);
}
System.out.println("===== Finished BlackListDates.runPrePlugin =====");
}
private static boolean isToday(String blackDate) {
DateFormat dateFormat = new SimpleDateFormat("MM/dd");
Date date = new Date();
if( blackDate.equalsIgnoreCase( dateFormat.format(date).toString() ) )
return true;
else
return false;
}
private static void setResult(PluginContext ctx, String reqBodyJSON, int resultCode, String msg) {
PluginResult ret = new PluginResult(reqBodyJSON, resultCode, msg);
ctx.setPluginResult(ret);
return;
}
}
例16-3 (この項の終わりにある)は、操作が完了した後に、操作に関する電子メールを送信するpostプラグインを示しています。
このプラグインを構成するには、次の表に示す属性を使用します。
| 属性名 | 属性値 |
|---|---|
|
pluginName |
EmailNotification |
|
pluginDescription |
This is an Email Notification Plug-in. |
|
pluginResource |
アカウント |
|
pluginOperation |
checkout |
|
pluginTiming |
post |
|
pluginOrder |
1 |
|
pluginClassName |
EmailNotificationPlugin 注意: クラス名は、自身のプラグインJARファイル内のクラス名と一貫している必要があります。 |
|
pluginClassPath |
注意:
pluginClassPath: ["/ |
|
pluginCustomAttrs |
次のカスタム属性を使用して、電子メールの送信に使用するSMTPサーバー、電子メールが送信されるアドレスなどの情報を送信します。
|
電子メールの送信に使用するSMTPサーバー、電子メールが送信されるアドレスなどの情報を送信するために次のカスタム属性を構成することも必要です。
| 属性名 | 属性値 |
|---|---|
|
smtp_server |
SMTPホスト名 |
|
smtp_port |
25 |
|
to_addr |
<EMAIL ADDRESS> 注意: 複数の値を設定できます。必要に応じて、任意の数の |
|
from_addr |
<EMAIL ADDRESS> |
|
user |
オプションです。SMTPログイン・ユーザー名 |
|
password |
オプションです。SMTPログイン・ユーザー・パスワード |
このプラグインは、電子メールを送信するためにJAVA Mail APIを使用します。JAVA Mailライブラリの詳細およびライブラリのダウンロードは、次の場所を参照してください。
http://www.oracle.com/technetwork/java/javamail/index.html
プラグインをコンパイルする手順は、次のとおりです。
必要に応じて、次のファイルをダウンロードします。
| ダウンロード元: | ダウンロードするファイル |
|---|---|
|
ORACLE_HOME |
|
|
JAVA Mail API |
|
次のサンプル・コンパイル・コマンドを使用します。
javac -cp .:ORACLE_HOME/opam/jlib/opam-plugin-framework.jar: ORACLE_HOME/opam/jlib/third-party/jettison-1.3.jar: ORACLE_HOME/opam/jlib/third-party/jersey-bundle-1.4.jar: ORACLE_HOME/opam/jlib/third-party/jsr311-api.jar:. /javax.mail.jar EmailNotificationPlugin.java
JARファイルを作成します。
jar -cf EmailNotificationPlugin.jar EmailNotificationPlugin.class
Oracle Privileged Account Managerに対してこのプラグインを構成すると、プラグインは、構成済の操作が実行されるたびに、カスタム属性に設定されているアドレスに電子メールを送信します。たとえば、アカウント・リソース・タイプおよびチェックアウト操作に対してこのプラグインを構成すると、プラグインは、チェックアウトが完了するたびに電子メール通知を送信します。
例16-3 電子メール通知のpostプラグイン
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.json.JSONStringer;
import org.codehaus.jettison.json.JSONArray;
import com.oracle.idm.opam.plugin.interfaces.PostPlugin;
import com.oracle.idm.opam.plugin.context.PluginContext;
import com.oracle.idm.opam.plugin.context.PluginResult;
import java.lang.Thread;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
/* Sample post plugin that sends email notification */
public class EmailNotificationPlugin implements PostPlugin {
public void runPostPlugin(PluginContext ctx, String reqBodyJSON,
String pluginCfgJSON) {
PluginResult result =
new PluginResult(reqBodyJSON, PluginResult.CODE_SUCCESS, null);
try {
result.appendLog("Starting EmailNotificationPlugin");
/* Get the resource type and operation name from the context */
JSONObject opJSON = new JSONObject(ctx.getOperationJSON());
String resourceType = opJSON.getString("resourceType");
String operationName = opJSON.getString("operationName");
/* Get the target name */
JSONObject json = null;
String targetName = null;
if (ctx.getTargetJSON() != null) {
JSONObject targetJSON = new JSONObject(ctx.getTargetJSON());
json = targetJSON.getJSONObject("target");
targetName = json.getString("targetName");
}
/* Get the account name */
String accountName = null;
if (ctx.getAccountJSON() != null) {
JSONObject accountJSON = new JSONObject(ctx.getAccountJSON());
json = accountJSON.getJSONObject("account");
accountName = json.getString("accountName");
}
/* Get which user performed the operation */
JSONObject pluginAuthJSON =
new JSONObject(ctx.getAuthContextJSON());
String requestor = pluginAuthJSON.getString("requestor");
/* Get custom attributes defined in plugin configuration such as email server,
to address etc */
JSONObject plugin = new JSONObject(pluginCfgJSON);
JSONObject config = plugin.getJSONObject("plugin");
JSONArray customAttrsArr = new JSONArray();
if (config.has("pluginCustomAttrs"))
customAttrsArr = config.getJSONArray("pluginCustomAttrs");
String smtpServer = null;
String smtpPort = null;
String fromAddr = null;
String user = null;
String password = null;
JSONArray emailList = null;
for (int i = 0; i < customAttrsArr.length(); i++) {
JSONObject singleJSON = customAttrsArr.getJSONObject(i);
JSONObject singleAttr =
singleJSON.getJSONObject("pluginCustomAttr");
String attrName = singleAttr.getString("attrname");
if (attrName.equalsIgnoreCase("smtp_server"))
smtpServer =
singleAttr.getJSONArray("attrvalue").getString(0);
if (attrName.equalsIgnoreCase("smtp_port"))
smtpPort =
singleAttr.getJSONArray("attrvalue").getString(0);
if (attrName.equalsIgnoreCase("from_addr"))
fromAddr =
singleAttr.getJSONArray("attrvalue").getString(0);
if (attrName.equalsIgnoreCase("to_addr"))
emailList = singleAttr.getJSONArray("attrvalue");
if (attrName.equalsIgnoreCase("user"))
user = singleAttr.getJSONArray("attrvalue").getString(0);
if (attrName.equalsIgnoreCase("password"))
password =
singleAttr.getJSONArray("attrvalue").getString(0);
}
for (int i = 0; i < emailList.length(); i++) {
Properties properties = System.getProperties();
properties.setProperty("mail.smtps.host", smtpServer);
properties.setProperty("mail.smtp.port", smtpPort);
if (user != null && password != null) {
properties.setProperty("mail.user", user);
properties.setProperty("mail.password", password);
}
Session session = Session.getDefaultInstance(properties);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddr));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(emailList.getString(i)));
/* Set the email subject and body */
String subject =
"OPAM Notification : " + resourceType + " " + operationName;
String emailBody =
"Target : " + targetName + "\nAccount : " + accountName +
"\nOperation : " + operationName + "\nRequestor : " +
requestor;
message.setSubject(subject);
message.setText(emailBody);
/* Send the email */
Transport.send(message);
result.appendLog("Completed EmailNotificationPlugin successfully");
ctx.setPluginResult(result);
}
} catch (Exception e) {
result.appendLog("Exception happened: " + e);
result.setErrorCode(PluginResult.CODE_FAILURE);
result.setErrorMsg(e.getMessage());
ctx.setPluginResult(result);
}
}
}
プラグインの管理の詳細は、次のとおりです。
コンソールからのプラグインの管理の詳細は、第11章「プラグインの使用」を参照してください。
コマンド行からのプラグインの管理の詳細は、第A.7項「プラグインの操作」を参照してください。