您可以开发 JASPIC 提供程序,以使用 Liberty 服务器中提供的 com.ibm.wsspi.security.jaspi.ProviderService 接口来认证入站 Web 请求。
有关此任务
Java™ Authentication SPI for Containers 规范 JSR 196定义了用于认证服务提供者的接口。 在 Liberty 服务器中,必须将 JASPIC 提供程序打包为用户功能部件。 您的功能部件必须实现 com.ibm.wsspi.security.jaspi.ProviderService 接口。
过程
- 创建用于提供实现
com.ibm.wsspi.security.jaspi.ProviderService 接口的服务的 OSGi 组件。
ProviderService 接口定义方法 getAuthConfigProvider, Liberty 运行时调用此方法以检索实现 javax.security.auth.message.config.AuthConfigProvider 接口的 JASPIC 提供程序类的实例。
以下示例使用 OSGi 声明式服务注释:
@package com.mycompany.jaspi;
import java.util.Map;
import javax.security.auth.message.config.AuthConfigFactory;
import javax.security.auth.message.config.AuthConfigProvider;
import org.osgi.service.component.ComponentContext;
import com.mycompany.jaspi.SampleAuthConfigProvider;
import com.ibm.wsspi.security.jaspi.ProviderService;
@Component(service = { ProviderService.class },
configurationPolicy = ConfigurationPolicy.IGNORE,
immediate = true,
property = { "myPoviderPoperty1=value1",
"myPoviderPoperty2=value2"})
public class SampleJaspiProviderService implements ProviderService {
Map<String, String> configProps = null;
// This method called by the Liberty runtime
// to get an instance of AuthConfigProvider
@Override
public AuthConfigProvider getAuthConfigProvider(Map<String, String>,
AuthConfigFactory factory)
{
return new SampleAuthConfigProvider(configProps, factory);
}
protected void activate(ComponentContext cc) {
// Read provider config properties here if needed,
// then pass them to the AuthConfigProvider factory.
// This example reads the properties from the OSGi
// component definition.
configProps = (Map<String, String>) cc.getProperties();
}
protected void deactivate(ComponentContext cc) {}
}
- 将该组件与您的 JASPIC 认证服务提供者一起打包成用户功能部件中的 OSGi 捆绑软件。
- 确保您的功能部件包含 OSGi 子系统内容:
com.ibm.websphere.appserver.jaspic-1.1; type="osgi.subsystem.feature"。
- 将功能部件安装到用户产品扩展位置后,使用功能部件名称配置 server.xml 文件。 例如:
<featureManager>
...
<feature>usr:myJaspiProvider</feature>
</featureManager>