TAI的isTargetInterceptor方法没有被调用

时间:2014-07-31 06:02:20

标签: java single-sign-on websphere-8

我正在尝试使用TAI拦截器拦截来自试图访问我的应用程序的可信第三方的请求。我的目的是避免向用户显示身份验证页面,因为用户已经在我信任的第三方应用程序中进行了身份验证。

为此,我创建了一个实现TrustAssociationInterceptor的简单类。我在方法中有几个sysout initializeisTargetInterceptornegotiateValidateandEstablishTrust

我已经创建了一个Jar文件并将其放在\Appserver\lib\ext folder中。

我还在拦截器中配置了我的自定义TAI。从WebSphere Application Server管理控制台, 导航到启用信任关联的Security => Global Security =>Web and SIP security => Trust association => Enable the check box并保存它=>拦截器=>单击new并输入我的自定义TAI类的名称。

当WebSphere服务器启动时,将调用initialize方法。我可以在\Appserver\profiles\AppSrv1\logs\server1\SystemOut.txt中看到sysouts。

我创建了一个示例Web应用程序,它从JSP页面调用servlet。 我的问题是我的自定义TAI没有在中间拦截,我的请求直接进入servlet。 (我在SystemOut.txt中没有看到任何sysout)

我在这里遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

检查您是否:

  • 启用了应用程序安全性(在控制台中 - Security > Global security
  • 您的应用已在Security constraints中定义web.xml,因为您必须访问受保护的资源才能拦截TAI。

您可以启用跟踪com.ibm.ws.security.*=all,以便在向您的申请提出申请时在trace.log中查看更多详细信息。

<强>更新
这是我的样本。我使用的是WAS 8.5.5.1,所有方法都被称为:

// during start
[8/6/14 20:37:09:544 CEST] 00000001 TrustAssociat A   SECJ0121I: Trust Association Init class tai.TaiTest loaded successfully
[8/6/14 20:37:09:544 CEST] 00000001 SystemOut     O initialize
[8/6/14 20:37:09:544 CEST] 00000001 SystemOut     O getVersion
[8/6/14 20:37:09:544 CEST] 00000001 TrustAssociat A   SECJ0122I: Trust Association Init Interceptor signature: 1.0
[8/6/14 20:37:09:544 CEST] 00000001 SystemOut     O getType

//during stop
[8/6/14 20:40:24:338 CEST] 0000008d SystemOut     O cleanup

示例代码:

package tai;

import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.websphere.security.WebTrustAssociationException;
import com.ibm.websphere.security.WebTrustAssociationFailedException;
import com.ibm.wsspi.security.tai.TAIResult;
import com.ibm.wsspi.security.tai.TrustAssociationInterceptor;

public class TaiTest implements TrustAssociationInterceptor {

    @Override
    public void cleanup() {
        System.out.println("cleanup");
    }

    @Override
    public String getType() {
        System.out.println("getType");
        return "TaiTest";
    }

    @Override
    public String getVersion() {
        System.out.println("getVersion");
        return "1.0";
    }

    @Override
    public int initialize(Properties arg0)
            throws WebTrustAssociationFailedException {
        System.out.println("initialize");
        return 0;
    }

    @Override
    public boolean isTargetInterceptor(HttpServletRequest arg0)
            throws WebTrustAssociationException {
        System.out.println("isTarget");
        return false;
    }

    @Override
    public TAIResult negotiateValidateandEstablishTrust(
            HttpServletRequest arg0, HttpServletResponse arg1)
            throws WebTrustAssociationFailedException {
        // TODO Auto-generated method stub
        System.out.println("Negotiate");
        return null;
    }
}