开发定制信任关联拦截器
在开发“会话启动协议”(SIP) 应用程序时,可以创建定制信任关联拦截器 (TAI)。
开始之前
可能需要熟悉信任关联文档中包含的一般 TAI 信息。开发 SIP TAI 与开发其他在信任关联中使用的任意定制拦截器相似。事实上,SIP 应用程序的定制 TAI 是信任关联拦截器模型的一个扩展。请参阅开发信任关联的定制拦截器一节以了解更多详细信息。
关于此任务
TAI 可由 SIP Servlet 请求或 SIP Servlet 响应进行调用。要实现定制 SIP TAI,需要编写自己的 Java 类。
过程
- 写一个扩展 com.ibm.wsspi.security.tai.BaseTrustAssociationInterceptor 类并实现 com.ibm.websphere.security.tai.SIPTrustAssociationInterceptor 接口的 Java 类。 那些类在 WASProductDir/plugins/com.ibm.ws.sip.container_1.0.0.jar 文件中定义,其中 WASProductDir 是 WebSphere® Application Server 安装目录的标准路径名称。
- 声明下列 Java 方法:
- public int initialize(Properties properties) throws WebTrustAssociationFailedException;
- 这在第一个消息处理之前调用,因此实现就可以分配任何它需要的资源。例如,它可以建立一个到数据库的连接。WebTrustAssociationFailedException 在 WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar 文件中定义。properties 自变量的值来自在此步骤中设置的定制属性。
- public void cleanup();
- 这在 TAI 将释放任何它占据的资源时调用。例如,它可以关闭一个到数据库的连接。
- public boolean isTargetProtocolInterceptor(SipServletMessage sipMsg) throws WebTrustAssociationFailedException;
- 您的定制 TAI 应该用此方法来处理 sipMsg 消息。如果此方法返回 false,WebSphere 会对 sipMsg 忽略您的 TAI。
- public TAIResult negotiateValidateandEstablishProtocolTrust (SipServletRequest req, SipServletResponse resp) throws WebTrustAssociationFailedException;
- 此方法返回一个 TAIResult,它指示了要处理消息的状态,以及一个用户标识或者一个尝试进行认证的用户的唯一标识。如果认证成功,TAIResult 应包含状态
HttpServletResponse.SC_OK 和一个主体。如果认证失败,TAIResult
应包含一个返回码 HttpServletResponse.SC_UNAUTHORIZED (401)、SC_FORBIDDEN (403) 或者
SC_PROXY_AUTHENTICATION_REQUIRED (407)。这仅仅指示容器是否应该接受进一步处理的消息。要对入局的请求提问,TAI 实现必须生成并发送它自己的 SipServletResponse(包含一个提问)。应该为内部 TAI 错误抛出异常。表 1 描述了 negotiateValidateandEstablishProtocolTrust
方法的自变量值和产生的操作。事件的顺序如下:
表 1. negotiateValidateandEstablishProtocolTrust 自变量和操作的描述. 此表提供了 negotiateValidateandEstablishProtocolTrust 自变量和操作的描述。
自变量或操作 对于 SIP 请求 对于 SIP 响应 req 自变量的值 入局请求 Null resp 自变量的值 Null 入局响应 对于有效响应凭证的操作 返回包含 SC_OK 的 TAIResult.status 以及一个用户标识或唯一标识 返回包含 SC_OK 的 TAIResult.status 以及一个用户标识或唯一标识 对于不正确响应凭证的操作 返回具有 4xx 状态的 TAIResult 返回具有 4xx 状态的 TAIResult - 通过使用每一个应用程序部署描述符中的规则,SIP 容器将初始请求映射至应用程序;后续消息则基于 JSR 116 机制来映射。
- 如果任何应用程序需要安全性,SIP 容器则为该消息调用任何定义的 TAI 实现。
- 如果该消息传递安全性,此容器会调用相应的应用程序。
com.ibm.wsspi.security.tai.TAIResult 类在 WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar 文件中定义,具有三个用于创建 TAIResult 的静态方法。TAIResult create 方法使用一个 int 类型作为第一个参数。WebSphere Application Server 希望结果是有效的 HTTP 请求返回码,且解释如下:
如果值是 HttpServletResponse.SC_OK,那么此响应告知 WebSphere Application Server TAI 已完成它的协商。此响应还告知 WebSphere Application Server 使用 TAIResult 中的信息创建用户标识。
所创建 TAIResults 的含义显示在 表 2 中。
表 2. TAIResults 的含义. 下表列出了 TAIResults 的含义。
TAIResult 说明 public static TAIResult create(int status); 指示 WebSphere Application Server 的状态。因为已提供标识信息,所以这些状态不应是 SC_OK。 public static TAIResult create(int status, String principal); 指示 WebSphere Application Server 的状态并提供此用户的用户标识或唯一标识。WebSphere Application Server 通过查询用户注册表来创建凭证。 public static TAIResult create(int status, String principal, Subject subject); 指示 WebSphere Application Server 的状态、用户的用户标识或唯一标识以及定制主题。如果主题包含散列表,那么会忽略主体。主题的内容成为最终用户主题的一部分。 - public String getVersion();
- 此方法返回当前 TAI 实现的版本号。
- public String getType();
- 此方法的返回值是依赖于实现的。
- 在完成实现后,编译该实现。例如:/opt/WebSphere/AppServer/java/bin/javac -classpath
/opt/WebSphere/AppServer/plugins/com.ibm.ws.runtime_1.0.0.jar;/opt/WebSphere/AppServer/dev/JavaEE/j2ee.jar;/opt/WebSphere/AppServer/plugins/com.ibm.ws.sip.container_1.0.0.jar
myTAIImpl.java
- 对于集群中的每一个服务器,将类文件复制到 WebSphere 类路径中的位置(最好是 WASProductDir/plugin/ 目录)。
- 重新启动所有服务器。
- 在管理控制台中删除缺省的 WebSEAL 拦截器并单击新建来添加定制拦截器。验证该类名是否用点分隔并出现在类路径中。
- 单击定制属性链接来添加初始化该定制拦截器所必需的其他属性。当您的实现按先前步骤中的描述扩展 com.ibm.websphere.security.WebSphereBaseTrustAssociationInterceptor 时,这些属性传递给它的 initialize(Properties properties) 方法。
- 保存并同步(如果适用)该配置。
- 重新启动服务器,以使定制拦截器生效。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsip_devctai
文件名:tsip_devctai.html