我正在尝试在WebLogic 10.3.5.0中部署自定义角色映射器 - 这与此问题非常相似 - Weblogic Providers,但我无法让提供程序出现在弹出列表中。
配置文件:
<MBeanType Name="DatabaseRoleMapping"
DisplayName="DatabaseRoleMapping"
Package="com.bynx.weblogic.mbean.rolemapping"
Extends="weblogic.management.security.authorization.RoleMapper"
PersistPolicy = "OnUpdate">
<MBeanAttribute
Name = "ProviderClassName"
Type = "java.lang.String"
Writeable = "false"
Preprocessor = "weblogic.management.configuration.LegalHelper.checkClassName(value)"
Default = ""com.bynx.weblogic.mbean.rolemapping.DatabaseRoleMappingProvider""
/>
<MBeanAttribute
Name = "Description"
Type = "java.lang.String"
Writeable = "false"
Default = ""Provider that performs Role Mapping held in a database""
/>
<MBeanAttribute
Name = "Version"
Type = "java.lang.String"
Writeable = "false"
Default = ""1.0""
/>
<!--
<MBeanAttribute
Name = "DataSourceJNDI"
Type = "java.lang.String"
Default = ""UserDataSource""
Description = "DataSource JNDI name"
/> -->
</MBeanType>
提供者实施:
package com.bynx.weblogic.mbean.rolemapping;
import weblogic.management.security.ProviderMBean;
import weblogic.security.spi.RoleMapper;
import weblogic.security.spi.RoleProvider;
import weblogic.security.spi.SecurityServices;
public class DatabaseRoleMappingProvider implements RoleProvider
{
DatabaseRoleMapper mapper;
private String description;
@Override
public String getDescription()
{
return description;
}
@Override
public void initialize(ProviderMBean provider, SecurityServices services)
{
//DatabaseRoleMappingProviderMBean mBean = (DatabaseRoleMappingProviderMBean)provider;
//mapper = new DatabaseRoleMapper(mBean.getDataSourceJNDI());
mapper = new DatabaseRoleMapper("UserDataSource");
description = provider.getName() + " " + provider.getVersion();
}
@Override
public void shutdown()
{
}
@Override
public RoleMapper getRoleMapper()
{
return mapper;
}
}
构建文件:
<?xml version="1.0"?>
<project name="dbuser_authentication_provider" default="all" basedir=".">
<!-- global properties -->
<property environment="env"/>
<property name="jdk" value="C:/Program Files (x86)/Java/jdk1.6.0_26"/>
<property name="lib" value="P:/Web_Dev/Projects/WebLogic_Home/wlserver_10.3/server/lib"/>
<property name="mbeantypes" value="${lib}/mbeantypes"/>
<property name="sampleprovidersjar" value="databaseRoleMapping.jar"/>
<property name="sample_dir" location="."/>
<property name="src_dir" value="${sample_dir}/src"/>
<property name="provider_src_dir" value="${src_dir}/com"/>
<property name="build_dir" value="${sample_dir}/build"/>
<property name="class_dir" value="${sample_dir}/classes"/>
<property name="namespace" value="http://www.bea.com/ns/90/weblogic/security/samples"/>
<target name="all" depends="clean">
<!-- Set up the build directories -->
<mkdir dir="${build_dir}"/>
<mkdir dir="${class_dir}"/>
<!-- Only copy over the commo dtd and sample provider xml files for now -->
<copy todir="${build_dir}" flatten="true">
<fileset dir="${lib}">
<include name="commo.dtd"/>
</fileset>
</copy>
<copy todir="${build_dir}" flatten="true">
<fileset dir="${provider_src_dir}">
<include name="**/*.xml"/>
<include name="**/*.java"/>
</fileset>
</copy>
<!-- Build the sample security providers' jar file -->
<java classname="weblogic.management.commo.WebLogicMBeanMaker" fork="true" failonerror="true">
<jvmarg line="-cp '${jdk}/lib/tools.jar';${lib}/weblogic.jar -Dfiles=${build_dir} -DMDFDIR=${build_dir} -DMJF=${build_dir}/${sampleprovidersjar} -DtargetNameSpace=${namespace} -DpreserveStubs=true -DcreateStubs=true"/>
</java>
</target>
<target name="clean">
<delete quiet="true" dir="${build_dir}"/>
<delete quiet="true" dir="${class_dir}"/>
</target>
</project>
所有内容编译都很好,并且在生成的jar中似乎没有任何缺少的类文件,但是将jar放在mbeantypes目录中并重新启动它并不会出现在列表中。它最终将会查看一个数据库,但我已将其剥离到最低限度以尝试使其正常工作。任何建议 - 或者在日志中查找任何问题都将不胜感激。
答案 0 :(得分:0)
我已经设法让这个工作,所以我想我会分享我的解决方案以防万一其他人偶然发现这个。
首先是文档中的陈述:
但是,如果希望WebLogic Server在其他目录中查找MBean类型,请在启动服务器时使用-Dweblogic.alternateTypesDirectory =命令行标志,其中以逗号分隔的目录名列表。使用此标志时,WebLogic Server将始终首先从WL_HOME \ server \ lib \ mbeantypes加载MBean类型,然后查看其他目录并加载这些目录中存在的所有有效存档(无论其扩展名如何)。
似乎不正确。我们正在使用alternateTypesDirectory参数,如果我将jar放在命令行标志的其中一个目录中,我只能让WebLogic获取我的自定义MBean。
其次,如果您部署了任何使用版本控制的内容(例如,一个或多个可选的可部署库),则您的自定义提供程序必须实现weblogic.security.spi.VersionableApplicationProvider接口并在MBeanType元素中具有Implements = "weblogic.management.security.ApplicationVersioner"
定义XML。