【发布时间】:2015-08-26 08:35:11
【问题描述】:
我们正在尝试使用 TAI 拦截器,相同的应用程序在单节点集群上运行良好,但在多节点集群的情况下,它不会调用 TAI,而是提示输入默认领域凭据。
这里是 isTargetInterceptor 方法....
public boolean isTargetInterceptor(HttpServletRequest arg0)throws WebTrustAssociationException {
Enumeration enum1 = arg0.getAttributeNames();
while(enum1.hasMoreElements()){
String str=(String)enum1.nextElement();
logger.log("Request Attributes :"+str);
logger.log("Attribute value for "+str+"is :"+(String)arg0.getAttribute(str));
}
logger.log("Authentication Custom TAI [URI]:"+arg0.getRequestURI());
String strArtifact = arg0.getParameter("samlartifact");
logger.log(" isTargetInterceptor Receive user saml is: " + strArtifact);
if (strArtifact == null)
return false;
else
return true;}
请求的url格式是
https://hostname:443/NASTAIClient/loginServlet?samlartifact=artifactstring
即使我没有给出端口号,它也在 WAS(单节点)中工作,这是我们在不工作 WAS(多节点)中使用的实际格式
https://hostname/NASTAIClient/loginServlet?samlartifact=artifactstring
如果我们为默认领域提供了正确的凭据,它会在浏览器中创建 Ltpa cookie。
等等它创建 WS 主题。但是 TAI 拦截器没有被调用。我们比较了工作(单集群)WAS 和非工作(多集群)WAS 的不同级别的安全设置。我们没有找到任何特殊原因导致 TAI 没有被调用,而不是默认领域提示的原因
【问题讨论】:
-
您是否检查过 TAI 是否在其他节点上成功启动? (也许您没有将 TAI 类分发到其他节点)。您是否检查过节点是否在配置 TAI 后已同步并重新启动?否则,向您的 isTargetInterceptor 方法添加一些跟踪,因为它看起来返回 false,这就是默认身份验证的原因。
-
感谢您的回复 Gas,TAI 分配和所有节点的重启已经完成,当然我们在 isTargetInterceptor 方法中有跟踪,我们可以看到其他应用程序请求的其他日志,但是我们的应用程序请求我们甚至无法看到该日志以及更多关于其要求默认领域的信息。我们对所有其他请求返回 false,如果我们的 url 请求为 true,我们会根据一个参数进行过滤。因此,我们对 url 请求的整体观察甚至没有调用 isTargetInterceptor 方法,而是要求默认域。在这方面帮助我们。
-
感谢您的回复@Gas
-
你能发布你的 isTargetInterceptor 方法和你试图访问的 url 吗?我不明白 - TAI 被其他应用程序调用,但不是你的应用程序?这是相当不可能的。领域与它无关,它只是基本身份验证弹出窗口中的一个名称。单节点或多节点也不应该改变任何东西。我假设您是通过 IHS 以多方式访问的,因此主机名/端口可能不同。检查你的拦截器是否没有中继。
-
感谢 Gas,我用我们在两种情况下都使用的 isTargetInterceptor 方法和 url 格式更新了问题。是的,Gas,我们相应地更改了主机名,但我认为端口号不需要提及原因,因为我们在两个 WAS 中都使用它的默认端口。多 WAS 中的问题是,当我们立即点击上面的 url 时,它会要求默认领域,而在单个节点中它不会要求默认领域。如果节点不同步,是否有可能询问默认领域? v r 能够看到此日志 'logger.log("Authentication Custom TAI [URI]:"+arg0.getRequestURI())' 4 othr rqsts
标签: java websphere websphere-8 security-constraint