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

其中查询是 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 回答