为了获取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忽略了在新的初始上下文中设置的用户并尝试使用来自浏览器的用户。碰巧我可能需要在没有浏览器会话的后台工作人员中进行查询搜索(显然)。
任何人都可以帮忙吗?
答案 0 :(得分: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方式