简体   繁体   中英

Obtaining WorklistContext and Querying Tasks in Weblogic Integration

In order to get the Weblogic initial context to query the task database i am doing the following:

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

I then get the TaskQuery interface with the following code:

WorklistTaskQuery taskQuery = wliContext.getInterfaceForTaskQuery();

and to get the tasks i do:

taskQuery.getTasks(query);

where query is com.bea.wli.worklist.api.TaskQuery object.

Please note that this code is running inside the domain running the tasks.

Unfortunally i am getting the following error when i call the getTasks methods:

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

It seems Weblogic is ignoring the user set on the new initial context and trying to use the one coming from the browser. It so happens that i might need to do query searchs in background workers that don't have a browser session(obviously).

Can anyone help with this?

I've found a solution for this, though it's convoluted and ugly as hell.

Since i'm making these calls through an EJB i can authenticate the call by grabbing the EJB implementation from an authenticated context like so:

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

Your best bet for this is to avoid the above example and this API all together. Just use the regular MBean Implementation which allows authentication.

Update this solution doesn't seem to be viable, it will screw up the transaction management. Will report back, but it seems if you need to create tasks outside of an authenticated context you will need to go the MBean way

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM