开发定制信任关联拦截器

在开发“会话启动协议”(SIP) 应用程序时,可以创建定制信任关联拦截器 (TAI)。

开始之前

可能需要熟悉信任关联文档中包含的一般 TAI 信息。开发 SIP TAI 与开发其他在信任关联中使用的任意定制拦截器相似。事实上,SIP 应用程序的定制 TAI 是信任关联拦截器模型的一个扩展。请参阅开发信任关联的定制拦截器一节以了解更多详细信息。

关于此任务

TAI 可由 SIP Servlet 请求或 SIP Servlet 响应进行调用。要实现定制 SIP TAI,需要编写自己的 Java 类。

过程

  1. 写一个扩展 com.ibm.wsspi.security.tai.BaseTrustAssociationInterceptor 类并实现 com.ibm.websphere.security.tai.SIPTrustAssociationInterceptor 接口的 Java 类。 那些类在 WASProductDir/plugins/com.ibm.ws.sip.container_1.0.0.jar 文件中定义,其中 WASProductDirWebSphere® Application Server 安装目录的标准路径名称。
  2. 声明下列 Java 方法:
    public int initialize(Properties properties) throws WebTrustAssociationFailedException;
    这在第一个消息处理之前调用,因此实现就可以分配任何它需要的资源。例如,它可以建立一个到数据库的连接。WebTrustAssociationFailedExceptionWASProductDir/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
    事件的顺序如下:
    1. 通过使用每一个应用程序部署描述符中的规则,SIP 容器将初始请求映射至应用程序;后续消息则基于 JSR 116 机制来映射。
    2. 如果任何应用程序需要安全性,SIP 容器则为该消息调用任何定义的 TAI 实现。
    3. 如果该消息传递安全性,此容器会调用相应的应用程序。
    您的 TAI 实现可以修改 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();
    此方法的返回值是依赖于实现的。
  3. 在完成实现后,编译该实现。例如:/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
    1. 对于集群中的每一个服务器,将类文件复制到 WebSphere 类路径中的位置(最好是 WASProductDir/plugin/ 目录)。
    2. 重新启动所有服务器。
  4. 在管理控制台中删除缺省的 WebSEAL 拦截器并单击新建来添加定制拦截器。验证该类名是否用点分隔并出现在类路径中。
  5. 单击定制属性链接来添加初始化该定制拦截器所必需的其他属性。当您的实现按先前步骤中的描述扩展 com.ibm.websphere.security.WebSphereBaseTrustAssociationInterceptor 时,这些属性传递给它的 initialize(Properties properties) 方法。
  6. 保存并同步(如果适用)该配置。
  7. 重新启动服务器,以使定制拦截器生效。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsip_devctai
文件名:tsip_devctai.html