2014-07-21 49 views
0

我在其中部署在WebLogic Server春-MVC项目时,它用2个集群配置。当请求被从一个群集命中到另一个群集时,我们得到了"401 (Unauthorized)"错误。的Weblogic集群401(未授权)

但它适用于一些要求,有时导致该错误。

任何想法,为什么会出现这种情况?

回答

1

如果您将安全委托给Servlet容器并将您的应用程序部署到2个不同的群集(ClusterA,ClusterB),您将默认拥有两个不同的会话SessionA和SessionB(具有相同的cookie名称,JSESSIONID)。如果您没有会话Affinity和您的请求从ClusterA跳转到ClusterB,那么您的SessionA(带有Subject)在ClusterB上将无效。

如果您想通过两个群集拓扑寻找最大可用性,请考虑将HTTP会话状态委派给Coherence(请参阅Coherence * Web,网址为http://docs.oracle.com/middleware/1212/coherence/COHCW/cweb_wls.htm#CHDDGJHJ)。

采用这种拓扑结构可以部署在不同的集群(甚至是不同的WebLogic Server域和/或不同的应用服务器)许多应用程序之间共享会话。

+0

但对于一些要求它的成功对于一些要求它与此错误结束。 – Mojoy

+0

您是否启用了内存复制? weblogic.xml描述符中的元素: –

0

你已经在内存复制启用(默认禁用)? (在weblogic.xml描述元素,如果没有,用启用它:。

<session-descriptor> 
    <persistent-store-type>replicated_if_clustered</persistent-store-type> 
</session-descriptor> 

当第一个请求到达任何受管服务器clusteA在中它创建一个会话ID(查看您在浏览器的cookie JSESSIONID)

你是如何平衡两个集群之间的请求(硬件负载平衡器或Web服务器+代理插件)

你如何维护群集的亲和力?

如果没有集群的亲和力,通过处理的所有请求任何托管服务ClusterA中的r有权访问会话状态(启用In Memory复制时由WLS群集内部复制),但如果群集关联失败并且群集B中的任何受管服务器处理请求(最初由ClusterA服务),则Servlet容器将无法找到您的Cookie与ClusterB识别的任何HTTSession,它将失败并创建一个新的会话(在浏览器中检查cookie)。