我正在尝试使用TAI拦截器拦截来自试图访问我的应用程序的可信第三方的请求。我的目的是避免向用户显示身份验证页面,因为用户已经在我信任的第三方应用程序中进行了身份验证。
为此,我创建了一个实现TrustAssociationInterceptor
的简单类。我在方法中有几个sysout
initialize
,isTargetInterceptor
和negotiateValidateandEstablishTrust
。
我已经创建了一个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)
我在这里遗漏了什么吗?
答案 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;
}
}