Liberty 支持基于 Java Authorization Contract for Containers (JACC) 规范的授权以及缺省授权。 在 Liberty 中启用安全性时,除非指定了 JACC 提供程序,否则将使用缺省授权。
关于此任务
JACC 使第三方安全提供程序能够在应用程序服务器中管理授权。 缺省授权不需要特殊的设置,且缺省授权引擎作出所有授权决策。 但是,如果配置并设置了 JACC 提供程序以供 Liberty 使用,那么会将所有企业 Bean 和 Web 授权决策委派给 JACC 提供程序。 JACC 定义应用程序服务器与授权策略模块之间的安全合同。 这些合同指定如何在访问决策中安装,配置和使用授权提供程序。 要将 jacc-1.5 功能部件添加到 Liberty 服务器,请添加不属于 Liberty 的第三方 JACC 提供程序。
您可以通过实现 Liberty 服务器中提供的 com.ibm.wsspi.security.authorization.jacc.ProviderService 接口,开发 JACC 提供程序以具有 Java EE 应用程序的定制授权决策。 JACC 规范 JSR 115 定义了授权提供程序的接口。 在 Liberty 服务器中,必须将 JACC 提供程序打包为用户功能部件。 您的功能部件必须实现 com.ibm.wsspi.security.authorization.jacc.ProviderService 接口。
过程
- 创建 OSGi 捆绑软件项目 以开发 Java 类。
您的项目可能有编译错误。 要修正这些错误,需要导入两个软件包
javax.security.jacc 和
com.ibm.wsspi.security.authorization.jacc。
编辑文件 MANIFEST.MF 以导入缺少的包:
Manifest-Version: 1.0
Service-Component: OSGI-INF/myjaccExampleComponent.xml,
Bundle-ManifestVersion: 2
Bundle-Name: com.example.myjaac.osgiBundle
Bundle-SymbolicName: com.example.myjaac.osgiBundle
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.ibm.wsspi.security.authorization.jacc;version="1.0.0",
javax.security.jacc;version="1.5.0"
服务组件 XML 的示例 myjaccExampleComponent.xml:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true"
name="TestPolicyServiceProvider">
<implementation class="com.example.myjaac.osgiBundle.TestPolicyServiceProvider"/>
<property name="javax.security.jacc.policy.provider" type="String" value=""/>
<property name="javax.security.jacc.PolicyConfigurationFactory.provider" type="String" value=""/>
<service>
<provide interface="com.ibm.wsspi.security.authorization.jacc.ProviderService"/>
</service>
</scr:component>
- 在功能部件清单文件中的 Subsystem-Content 下,创建 Liberty 功能部件项目以将先前的 OSGi 捆绑软件添加到用户 Liberty 功能部件。
- 优化功能部件清单以添加必需的 OSGi 子系统内容:
com.ibm.ws.javaee.jacc.1.5; version="[1,1.0.200)"; location:="dev/api/spec/"。
Subsystem-ManifestVersion: 1.0
IBM-Feature-Version: 2
IBM-ShortName: jacc15CICSLiberty-1.0
Subsystem-SymbolicName: com.example.myjaac.libertyFeature;visibility:=public
Subsystem-Version: 1.0.0
Subsystem-Type: osgi.subsystem.feature
Subsystem-Content: com.example.myjaac.osgiBundle;version="1.0.0",
com.ibm.ws.javaee.jacc.1.5;version="[1,1.0.200)";location:="dev/api/spec/"
Manifest-Version: 1.0
如果需要再添加一个 Subsystem-Content ,那么必须在输入内容之前至少添加一个 space 。 如果不添加 space,那么 CICS® 将返回 java.lang.IllegalArgumentException。
- 将 Liberty 功能部件项目导出为 Liberty 功能部件 (ESA) 文件。
- 通过 FTP 将 ESA 文件传输到 zFS。
- 使用
installUtility 命令安装 ESA 文件。
./wlpenv installUtility install myFeature.esa
- 将
jacc-1.5 功能部件和包含 JACC 提供程序的 ESA 文件作为用户功能部件添加到 server.xml。
<feature>jacc-1.5</feature>
<feature>usr:jacc15CICSLiberty-1.0</feature>