0

タスク データベースにクエリを実行する Weblogic の初期コンテキストを取得するために、次のことを行っています。

Properties h = new Properties();
h.put(Context.SECURITY_PRINCIPAL, "weblogic");
h.put(Context.PROVIDER_URL, "t3://localhost:17101");
h.put(Context.SECURITY_CREDENTIALS, "weblogic");
h.put(Context.SECURITY_AUTHENTICATION, "simple");
WLInitialContextFactory test = new WLInitialContextFactory();
test.getInitialContext(h);

Context ctx = null;
ctx = getInitialContext();
WorklistContext wliContext = WorklistContextFactory.getRemoteWorklistContext(ctx, "MyTaskApplication");

次に、次のコードで TaskQuery インターフェイスを取得します。

WorklistTaskQuery taskQuery = wliContext.getInterfaceForTaskQuery();

そして、私が行うタスクを取得するには:

taskQuery.getTasks(query);

query は com.bea.wli.worklist.api.TaskQuery オブジェクトです。

このコードは、タスクを実行しているドメイン内で実行されていることに注意してください。

残念ながら、getTasks メソッドを呼び出すと、次のエラーが発生します。

java.lang.SecurityException: [WLI-Worklist:493103]Access denied to resource /taskplans
/Manual:1.0. Applicable policy: Query Caller: principals=[] Method: com.bea.wli.worklist.security.WorklistSecurityManager.assertTaskAccessAllowed

Weblogic は、新しい初期コンテキストで設定されたユーザーを無視し、ブラウザーからのユーザー セットを使用しようとしているようです。ブラウザセッションを持たないバックグラウンドワーカーでクエリ検索を行う必要があるかもしれません(明らかに)。

誰でもこれを手伝ってもらえますか?

4

1 に答える 1

0

私はこれに対する解決策を見つけましたが、それは複雑で地獄のように醜いものです。

EJB を介してこれらの呼び出しを行っているため、次のように認証されたコンテキストから EJB 実装を取得することにより、呼び出しを認証できます。

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.SECURITY_PRINCIPAL,"user");
env.put(Context.PROVIDER_URL,"t3://localhost:7001");
env.put(Context.SECURITY_CREDENTIALS,"password");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
getSessionInterface(interfaceClass, new InitialContext(env));

これに対する最善の策は、上記の例とこの API を一緒に避けることです。認証を許可する通常の MBean 実装を使用するだけです。

このソリューションを更新すると、実行可能ではないようです。トランザクション管理が台無しになります。報告しますが、認証されたコンテキストの外でタスクを作成する必要がある場合は、MBean の方法を使用する必要があるようです

于 2010-11-19T10:33:35.697 に答える