Java 在Weblogic集成中获取WorklistContext和查询任务

Java 在Weblogic集成中获取WorklistContext和查询任务,java,weblogic,weblogic-10.x,weblogic-integration,wli,Java,Weblogic,Weblogic 10.x,Weblogic Integration,Wli,为了获取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_AUTHENTI

为了获取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似乎忽略了新初始上下文上的用户集,并试图使用来自浏览器的用户集。碰巧我可能需要在没有浏览器会话的后台工作人员中进行查询搜索


有人能帮上忙吗?

我已经找到了一个解决办法,尽管它非常复杂和丑陋

因为我是通过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方式

如果您的EJB位于同一容器上,那么简单的新InitialContext是否足够?是的,它将。。。。如果呼叫来自已验证的源webcontext。在我的例子中,调用是由没有身份验证的批处理过程进行的。因此,通过这种方式,我在调用后创建了一个自动验证的上下文