中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > WebLogic Server 8.1
扩展Custom Security Provider的管理控制台
作者:佚名 时间:2005-11-24 15:52 出处:互连网 责编:chinaitpower
              摘要:扩展WebLogic Server Admin Console的功能可使具备把自定义应用程序的管理结合到中央位置上的能力。

  扩展WebLogic Server Admin Console的功能可使具备把自定义应用程序的管理结合到中央位置上的能力。


   我们将讨论这样一种情况:通过添加MBean属性来修改dev2dev中提供的Custom Security Provider,这些属性可以管理目前很难被硬编码到Custom Security Provider MBean中的 TxDataSource、DatabaseUser、DatabaseUserPassword、DatabaseDriver和DatabaseURL。
  扩展控制台有两种方式:第一种方式是让WebLogic Server控制台试图呈现一个细节窗口,该窗口基于添加到DbSampleAuthenticator.xml文件的自定义MBean属性,该文件可以用来创建MBean。第二种方式是创建一个web应用程序,其中包含了控制台在调用Custom Security Provider MBean时需要显示的类文件和JSP。本文将对这两种方法加以详细讨论。

添加简单的数据类型
  首先,让我们讨论一下仅把代表简单数据类型的自定义属性添加到DbSampleAuthenticator xml文件中的情况,并看一看当我们想访问数据库的时候如何访问这些属性值,不管是在WebLogic Server初始化期间(此时数据源不可用)还是在随后期间(用户访问安全资源时已经通过了认证)。
  我将从添加到一个从http://dev2dev/codelibrary/code/sec_rdbms.jsp中找到的实例开始。首先要做的是给MBean添加属性,这样我们才可以通过weblogic.Admin命令行,或者通过 JavaBean或JSP中的JMX代码访问这些属性。
  在DbSampleAuthenticator.xml文件中,添加以下可写入的String属性:
  • DatabaseUser
  • DatabaseUserPassword
  • DatabaseURL
  • DatabaseJDBCDriver
  • DataSourceName

<MBEANATTRIBUTE Name = "DatabaseUser" Type = "java.lang.String"
Writeable = "true" Default = ""scott""/>


  属性添加完成之后,您可以运行ant来检验根目录中的build.xml。build.xml会出现很多种情况,花费一些时间来深入研究一下这个文件是非常值得的,因为MBeans被创建、jar并复制到 /server/lib/mbeantypes目录。如果WebLogic Server已经在运行,必须重新启动才可以验证自定义MBean。只要WebLogic Server在运行,您就会看到一个类似于图1的窗口,它是控制台中一种新增的Custom Security Authenticator,叫做 DbSampleAuthenticator(注意:这是WebLogic Server 8.1)。当您选择DbSampleAuthenticator时,您就会看到类似于图2的窗口。


图1


图2

  在创建了DbSampleAuthenticator之后,点击Details选项卡,您应该看到图3。


图3

  如果您查看为DbSampleAuthenticatorMBean生成的Java代码,您就会看到所添加各种属性的 getter和setter。
  (到底如何访问这些新的MBean属性呢?为了更好地了解MBeanMaker的工作方式,  请参看《Developing Security Providers for Weblogic Server》[http://edocs/wls/docs81/dvspisec/ design.html#1171038])。

我们如何传送该MBean?
  诚然,访问这些新属性的方法有很多种。第一种方法是通过JMX调用,这将在后面加以讨论;第二种是通过Security Provider的LoginModule。第一个需要检验和修改的文件是DbSampleAuthenticationProviderImpl.java,WebLogic Server初始化时会调用该文件。
  public void initialize(ProviderMBean providermbean,
SecurityServices securityservices)
  我们将修改AppConfigurationEntry getConfiguration,通过公共的AppConfigurationEntry getLoginModuleConfiguration()调用。一种配置选项映射被传递到LoginModule中,LoginModule 是添加新MBean的最佳位置,因此随后可以访问属性。上述就是我们在将MBean传递到 LoginModule的initialize方法时所需要做的工作。现在我们将看看如何访问属性。

访问MBean的属性
  LoginModule的实现将被更改为检索Map变量中所传递的ProviderMBean。(参看http://edocs/wls/docs81/dvspisec/atn.html#1153042 《Implement the JAAS LoginModule Interface》)。从这里,我将MBean属性传递给负责认证用户的方法(参见清单1和2)。

清单1:DbSample AuthenticationProviderImpl.java

public void initialize(ProviderMBean providermbean, SecurityServices securityservices)
{
:
myMBean = (DbSampleAuthenticatorMBean)providermbean;
:
}

public AppConfigurationEntry getLoginModuleConfiguration()
{
HashMap hashmap = new HashMap();
return getConfiguration(hashmap);
}

private AppConfigurationEntry getConfiguration(HashMap hashmap)
{
sLogger.debug("Requesting login module configurations");
hashmap.put("myMBean", myMBean);
return new AppConfigurationEntry("examples.db.security.providers.
authentication.DbSampleLoginModuleImpl", controlFlag, hashmap);
}

清单2:DbSampleLoginModuleImpl.java

public void initialize(Subject subject1,
CallbackHandler callbackhandler, Map map, Map map1) {
:
DbSampleAuthenticatorMBean dbsampleauthenticatormbean =
(DbSampleAuthenticatorMBean)map1.get("myMBean");
:
String databaseURL = dbsampleauthenticatormbean.getDatabaseURL();
String databaseUser = dbsampleauthenticatormbean.getDatabaseUser();
String databaseUserPassword =
dbsampleauthenticatormbean.getDatabaseUserPassword();
String databaseJDBCDriver =

dbsampleauthenticatormbean.getDatabaseJDBCDriver();
String DataSourceName = dbsampleauthenticatormbean.getDataSourceName();
DbSampleAuthenticatorDatabase database = new DbSampleAuthenticatorDatabase
(databaseURL, databaseUser, databaseUserPassword, databaseJDBCDriver, DataSourceName);
:
}


  MBean属性就是这样访问!要了解如何使用这些内容,请参看DbSampleAuthenticatorDatabase.java,当WebLogic Server进行初始化、JNDI未被设置以及不能访问JDBC数据源的时候,我们使用驱动程序、用户id、密码和URL来实现数据库连接。

扩展控制台来显示自定义页面
  现在,趣事开始了;我们需要做什么才能达到这个目标呢?事实上不需要太多。您需要Web 应用程序,它具有web.xml文件中的一些默认值,以及调用类来把控制台使用的JSP页面返回给默认详细页面中的翻译器(render)(参见清单3)。在本例中,JSP必须可以通过JMX查询Security MBean和设置属性,从而使LoginModule在随后依然可以访问他们。您或许会问,我需要为每一security provider自定义Web应用程序吗?不,这个Web应用程序和Java类可以处理每一种security provider,并且会在认证每一位用户的时候被调用;这种类可以判断调用哪一种Security MBean并返回null,或者没有JSP页面需要呈现,或者返回控制台显示的JSP页面。您可以拥有一个Authentication提供商,它可以有一个自定义的JSP页面,或者是具有默认控制台页面的另一家提供商。

清单3:写入用于返回控制台将要呈现的JSP页面的Console Extension类

public final class DbSampleConsoleExtension extends Extension
implements SecurityExtensionV2
{

public DbSampleConsoleExtension()
{
}

public String getExtensionForProvider
(ObjectName objectname, String s, ObjectName objectname1)
{
sLogger.debug("DbSampleConsoleExtension.getExtensionForProvider");
if(s.equals("examples.db.security.providers.
authentication.DbSampleAuthenticatorMBean"))
{
return "DbSampleConsolePage.jsp";
// This jsp must be in this web-app or a 404 will be returned
} else
{
return null;
// for all other Providers, have the console use default behavior
}
}


  这就是我们在判断调用哪一个MBean时所需要做的工作,当您点击自定义按钮或者其他安全性提供商时,这个类就会被调用,您可以覆盖默认生成的页面或者返回您自己的页面。
  当您点击DbSampleAuthenticator链接时,就会显示图4。


图4

创建JSP
  我使用控制台扩展标签库来使格式和其他默认的WLS Console页面更加一致。我还使用了一些小花招来使这个例子更加容易摹仿,即在我呈现form时使用相同的JSP。毫无疑问,创建JSP在这里可以被优化,但是它可以满足这个例子的要求。

  1. 获取当前的属性值,您就可以在form上显示这些属性值。
  2. 显示form并添加提交按钮。
  3. 处理form值和设置MBean属性。

获取属性
  在我的JSP中,我创建并调用了一种小型的方法来传播HashMap,并在随后设置form默认值时使用HashMap(参见清单4,由于空间限制,清单4~6 在www.syscon.com/weblogic/sourcec.cfm 中提供)。获取MBean和检索当前的属性值就非常简单了。

设置属性
  设置属性就像获取属性一样直接,您仍然必须得到MBean对象,但是现在您需要创建一个基于 Attribute Name的新属性和从form输入的新属性值,然后设置属性。清单5是在POS操作中传递的所有form元素的循环,以及设置那些匹配我们希望设置的属性名称。
  最后一件需要注意的事情是,既然JSP实例化MBean,您就需要导入MBean类bSampleAuthenticatorMBean,这意味着类examples.db.security.providers.authentication. DbSampleAuthenticatorMBean必须存放在web-app/WEB-INF/classes目录中。
  要从命令行设置MBean,使用清单 6。(清单4~6 在www.syscon.com/weblogic/sourcec.cfm 中提供)

结束语
  在本文中,我试着论证如何通过添加MBean新属性和访问他们需要的代码来为Custom Security Providers 扩展控制台。为自定义安全性提供商扩展控制台的功能有两种方式。您可以简单地为SecurityProvider.xml文件添加可写入属性并重编译Security Provider jar文件,这样WebLogic Server Console就可以试着把窗口当做一个详细页面来呈现;或者,您可以使用一个控制台扩展类以及自定义JSP文件来编写自己的Web应用程序,以供控制台使用。

致谢
  我要感谢WebLogic Server OA&M团队的Chris Chiodo,他解决了我在开发这些例子时遇到的一些问题。
  尽管这个例子使用了TxDataSource,我们[BEA]不支持通过安全性提供商来使用WLS资源。任何涉及WLS受保护资源的操作都是禁止的,如连接池。您可以并且应当通过JDBC直接访问数据库。

本文其他代码的ZIP文件(316K)位于:http://www.sys-con.com/weblogic/archives/0208/kennedy0208.zip

原文出处
http://www.sys-con.com/story/?storyid=42957&DE=1

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有