代码之家  ›  专栏  ›  技术社区  ›  Nuno Furtado

weblogic集成中worklistcontext的获取与任务查询

  •  0
  • Nuno Furtado  · 技术社区  · 15 年前

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

    有人能帮忙吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Nuno Furtado    15 年前

    我已经找到了一个解决办法,尽管它是复杂和丑陋的地狱。

    因为我通过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。只使用允许进行身份验证的常规MBA实现。

    更新这个解决方案似乎不可行,它会搞砸事务管理。将进行报告,但如果需要在经过身份验证的上下文之外创建任务,则需要采用MBean方式