【问题标题】:How can you use SessionAsSigner in a Java Bean called from an XPage?如何在从 XPage 调用的 Java Bean 中使用 SessionAsSigner?
【发布时间】:2012-07-09 19:33:38
【问题描述】:

根据 Phillip Riand(参见:discussion on openNTF)的说法,这是不可能的……他们需要知道设计元素才能找出签名的人。因此,它仅在 SSJS 中可用。

【问题讨论】:

    标签: javabeans xpages xpages-ssjs


    【解决方案1】:

    我知道有两种方法可以在 Java bean 中使用 sessionAsSigner 对象:

    1 通过解析 sessionAsSigner 对象:

    FacesContext context = FacesContext.getCurrentInstance();
    Session sessionAsSigner = context.getApplication().getVariableResolver().
            resolveVariable(context, "sessionAsSigner");
    

    2 通过使用扩展库中 com.ibm.xsp.extlib.util.ExtLibUtil 类中的 getCurrentSessionAsSigner() 函数。

    为了能够使用它(在 Java 和 SSJS 中),您需要确保所有设计元素都由相同的用户 ID 签名。如果不是这种情况,则 sessionAsSigner 对象将不可用('undefined')。

    【讨论】:

    • 啊……有趣。我通常使用 DominoUtils.getSession() - 而该类没有 sessionAsSigner。我不知道它存在于 ExtLibUtil 类中。谢谢! - 是的,我知道你必须用相同的 id 签署所有元素才能工作;-)
    【解决方案2】:

    我发现解决方案就在眼前 :-)

    我将我的 XPage(在本例中为 XAgent)更改为:

    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
    
    This is an xAgent returning json data...
    
    <xp:this.afterRenderResponse><![CDATA[#{javascript:Controller.verify(sessionAsSigner)}]]></xp:this.afterRenderResponse>
    

    在 bean 中,当我需要以签名者身份打开数据库/文档时,我只是在参数中使用了会话。有时解决方案是如此简单:-)

    /约翰

    【讨论】:

    • 被称为dependency injection的原则的好小例子。喜欢它!
    • 感谢您的建议!在我们的例子中,单个签名者比单个歌手更难维护...... ;-)
    【解决方案3】:

    这是我偶然发现的一篇相当老的帖子。尝试了上面提到的一些解决方案:

    1. resolveVariable 对我不起作用,至少对sessionAsSigner 不起作用,因为这会引发运行时错误(不过,我可以解决普通的旧 session...)

    2. 说实话,我不太了解 Controller.verify(sessionAsSigner) 方法;控制器是 XAgent 特有的东西吗?如果是这样,我这里没有 XAgent,所以不能使用它

    3. 不想在这里导入额外的 ExtLib 类...

    于是我想出了另一个看起来很简单的解决方案:

    在我的 javaBean 中创建了一个将会话对象作为参数的方法;因为 sessionAsSigner 与 session 属于同一类,所以我不必导入新的东西。

    Javacode 是:

    public void testSession(Session s) throws Exception{
            System.out.println(" > test effective user for this session = " 
                 + s.getEffectiveUserName());
    }
    

    这是从 SSJS 调用的

    mybean.testSession(session);
    

    myBean.testSession(sessionAsSigner);
    

    也许也能帮助别人

    【讨论】:

    • 这正是我所做的......我的 bean 被称为“控制器”和方法“验证”:-)
    • 啊,我早该想到的;我个人的java经验还需要很多改进,你知道的;在我目前的阶段,我只能一步一步地思考:D - 感谢您指出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2013-01-18
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多