【问题标题】:Websphere 8 cluster and JSF2 issueWebsphere 8 集群和 JSF2 问题
【发布时间】:2017-02-21 16:53:49
【问题描述】:

我目前正在 Websphere 8.0 上使用 JSF 进行编程,但遇到了一个问题,我认为这是因为我们的集群。我们有两个节点,在一个节点宕机一段时间后,我的问题就没有发生了。

我的问题是我通过 commandButton 提交后以 javax.faces.application.ViewExpiredException 结束。

在此之前的堆栈跟踪中我也发现了这个:

View State cannot be reconstructed
javax.faces.FacesException: javax.faces.application.ViewExpiredException
    at org.apache.myfaces.shared_impl.util.StateUtils.decrypt(StateUtils.java:496)
    at org.apache.myfaces.shared_impl.util.StateUtils.reconstruct(StateUtils.java:378)

所以我猜这两个节点之间的处理有问题。

在我的 web.xml 中我设置了:

<distributable />

<env-entry>
        <env-entry-name>jsf/ClientSideSecretKey</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>SRe1FY2HKwBTOtT5KrtmiSoOzws+NA9/yX191wMFn9o=</env-entry-value>
    </env-entry> 

就像其他线程中提到的其他问题一样,但我的问题仍然存在。

Websphere 内部是否需要进行一些配置?

【问题讨论】:

    标签: jsf jsf-2 websphere


    【解决方案1】:

    这表明存在加密问题。 WebSphere 8.0 使用 MyFaces JSF 2.0 实现——您可能需要通过 MyFaces 上下文参数为每个节点配置一个共享密钥。至少,您需要设置 org.apache.myfaces.SECRET 参数:

    <!-- Defines the secret (Base64 encoded) used to initialize the secret key
         for encryption algorithm. The size of it depends on the algorithm used for encryption -->
    <context-param>
        <param-name>org.apache.myfaces.SECRET</param-name>
        <param-value>MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz</param-value>
    </context-param>
    

    MyFaces 安全参数的解释是here

    【讨论】:

    • 不管怎样,我从来没有见过一个节点自动切换节点,如果它在用户会话当前存在的情况下关闭。防火墙/LB 会将它们放到节点 #1 并且所有基于 cookie 的请求等都会重定向到那里?如果服务器停止/启动,他们的会话就死了,因此视图过期了?下次他们登录时,LB 会将他们发送到“up”节点/服务器?
    • WebSphere ND - 和其他服务器 - 通过会话故障转移支持这一点。在这种情况下,如果一个节点出现故障,则来自故障节点的会话可以被另一个节点拾取并继续。 (这就是集群的动机……)
    • 可能是一个正确配置的环境的乐趣:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多