开发安全应用程序(八)--为信任关联开发定制拦截器

来源:互联网 发布:java常用项目管理工具 编辑:程序博客网 时间:2024/05/16 07:29
 为信任关联开发定制拦截器
如果您正在使用除 Tivoli WebSeal V3.6 以外的第三方反向代理服务器,则必须为代理服务器提供 WebSphere 拦截器接口的实现类。本主题描述必须实现的接口。

定义拦截器类方法。
通过在 trustedservers.properties 文件中设置属性来配置 WebSphere Application Server。
定义拦截器类方法
WebSphere Application Server 提供了拦截器 Java 接口 com.ibm.websphere.security.TrustAssociationInterceptor,此接口定义了下列方法:

isTargetInterceptor(HttpServletRequest req)
isTargetInterceptor() 方法用来确定请求是否产生于与拦截器相关联的代理服务器。实现代码必须检查入局请求对象,并确定转发请求的代理服务器是否是此拦截器的有效代理服务器。此方法的结果确定拦截器是否处理请求。

validateEstablishedTrust(HttpServletRequest req)
validateEstablishedTrust() 方法确定从中产生请求的代理服务器是否可信。在 isTargetInterceptor() 方法之后调用此方法。实现代码必须认证代理服务器。认证机制是特定于代理服务器的。例如,在为 WebSeal 服务器提供的 WebSphere 实现中,此方法从 HTTP 头中检索基本认证信息,并对照 WebSphere Application Server 所使用的用户注册表对该信息进行验证。如果凭证无效,则方法抛出 WebTrustAssociationException 异常,此异常表示代理服务器不可信且将拒绝该请求。

getAuthenticatedUsername(HttpServletRequest req)
在 代理服务器与 WebSphere Application Server 之间建立信任之后才会调用 getAuthenticatedUsername 方法。WebSphere Application Server 已接受代理服务器的认证请求,必须马上对请求授权。要授权请求,必须根据授权策略认证原始请求者的名称以确定请求者是否具有必要的特权。此方法的实现代码 必须从 HTTP 请求头抽取用户名,并确定该用户是否有权访问请求的资源。例如,在 WebSphere 为 WebSeal 服务器提供的实现中,该方法在 HTTP 请求头中查找 iv-user 属性,并抽取与该属性关联的用户标识进行授权。

通过在 trustedservers.properties 文件中设置属性来配置 WebSphere Application Server

在示例:信任关联拦截器中对 WebSeal 拦截器描述了此过程,那里所描述的过程变化如下:

建 立您的代理的名称以在 WebSphere Application Server 配置属性中使用。在设置 com.ibm.websphere.security.trustassociation.types 属性时请使用此名称。例如,如果代理名为 myProxy,则将此属性设置为 com.ibm.websphere.security.trustassociation.types=myproxy。

基于您指定为代理类型的名称,WebSphere Application Server 查找命名该实现类的属性。将此属性的值设置为您的实现类的名称。实现类必须可从类路径的信息中找到。

属性名基于您根据此模式指定给您的代理的名称:com.ibm.websphere.trustassociation.proxy.interceptor(其中,proxy 是您为代理定义的名称)。

例 如,对于称为 myProxy 的代理,属性名是 com.ibm.websphere.trustassociation.myproxy.interceptor,而对于代理类型 webseal36,属性名是 com.ibm.websphere.trustassociation.webseal36.interceptor。

使您的定制拦截器可配置

为了能够通过配置文件对定制拦截器进行配置,可以创建 com.ibm.websphere.security.WebSphereBaseTrustAssociationInterceptor 类的子类并提供下列方法的实现:

init(String propsfile)
init() 方法读取为拦截器指定的配置文件。通过使用某种属性在 trustedservers.properties 文件中指定配置文件,通过以下模式确定该属性的名称:com.ibm.websphere.trustassociation.proxy.config (其中,proxy 是代理的名称)。例如,对于名为 myProxy 的代理,属性名是 com.ibm.websphere.trustassociation.myproxy.config,而对于代理类型 webseal36,属性名是 com.ibm.websphere.trustassociation.webseal36.config。该属性的值就是拦截器的配置文件的名称。

cleanup()
cleanup 方法为拦截器执行任何必要的终止工作。
Copy code
示例:信任关联拦截器
如果您正在使用除 Tivoli WebSeal 产品以外的第三方反向代理服务器,则必须为代理服务器提供信任关联拦截器接口的实现类。

使用 TrustAssociation Interceptor 接口

WebSphere Application Server 提供了拦截器 Java 接口 com.ibm.websphere.security.TrustAssociationInterceptor,此接口定义了下列方法:

public boolean isTargetInterceptor (HttpServletRequest req) throws WebTrustAssociationException;
public void validateEstablishedTrust (HttpServletRequest req) throws WebTrustAssociationException;
public string getAuthenticatedUsername (HttpServletRequest req) throws WebTrustAssociationException;
isTargetInterceptor 方法用来确定由代理服务器产生的请求是否与拦截器相关联。实现代码必须检查入局请求对象,并确定转发请求的代理服务器是否是此拦截器的有效代理服务器。此方法的结果确定拦截器是否处理请求。

validateEstablishedTrust 方法确定请求从中产生的代理服务器是否可信。在 isTargetInterceptor 方法之后调用此方法。实现代码必须认证代理服务器。认证机制是特定于代理服务器的。例如,在 WebSphere 为 WebSeal 服务器提供的实现中,此方法从 HTTP 头中检索基本认证,并对照产品所使用的用户注册表验证该信息。如果凭证无效,则代码抛出 WebTrustAssociationException 异常,表示代理服务器不可信且将拒绝该请求。

在代理服务器与产品之间建立信 任之后,才会调用 getAuthenticatedUsername 方法。WebSphere Application Server 已接受代理服务器的认证请求,必须马上对请求授权。要授权请求,必须根据授权策略认证原始请求者的名称以确定请求者是否具有必要的特权。此方法的实现代码 必须从 HTTP 请求头抽取用户名,并确定该用户是否有权访问请求的资源。例如,在 WebSphere 为 WebSeal 服务器提供的实现中,该方法在 HTTP 请求头中查找 iv-user 属性,并抽取与该属性关联的用户标识进行授权。

在创建拦截器类之后,必须通过提供下列属性来将 WebSphere Application Server 配置为使用该类。

请在 WebSphere 管理控制台中执行下列步骤:

启动管理控制台。
展开安全性并单击 LTPA。
单击信任关联。
选择启用信任关联,然后单击拦截器。
如 果使用的是 WebSeal 拦截器,则选择 com.ibm.ws.security.web.WebSealTrustAssociationInterceptor。否则,单击新建以添加拦截 器。WebSphere Application Server 使用服务器上的类路径来查找实现类。对于您添加的每个拦截器,请单击附加属性以输入属性名值对。对每个属性选择必需。
拦截器的属性和值如下(其中,proxy 是代理服务器的名称):

com.ibm.websphere.security.trustassociation.types
建立代理的名称。例如,如果代理服务器名为 myProxy,则按如下方式设置此属性:com.ibm.websphere.security.trustassociation.types=myproxy。

com.ibm.websphere.security.proxy.hostnames
此属性的值是正在运行代理服务器的机器的主机名。

com.ibm.websphere.security.proxy.loginId
此属性的值是代理服务器标识。

com.ibm.websphere.security.proxy.Id
此属性的值是代理服务器随请求一起发送至 WebSphere Application Server 的特殊头字段。

com.ibm.websphere.security.proxy.ports
这是代理服务器接收用户请求的端口。根据代理服务器的配置的不同,可以有另一个端口号。

指定 WebSeal 的名值对,如下所示:

com.ibm.websphere.security.trustassociation.types=webseal
com.ibm.websphere.security.webseal.id=iv-user
com.ibm.websphere.security.webseal.ports=443
注意:根据 WebSeal 配置的不同,您使用的可能是另一个端口号。
原创粉丝点击