选择显示字体大小

jmx+j2se5.0实现web应用的安全管理

一、 引言

  jmx(java管理扩展)提供了一组工具用来管理本地和远程应用程序、系统对象、设备等。 本文将解释如何使用jmx(jsr 160)来远程控制web应用程序,并将解释应用程序中可用于jmx客户的代码,同时将展示使用如mc4j和jmanage等的不同客户如何连接到支持jmx的应用程序。此外,我们还将详细地讨论使用rmi协议和jndi来保护通讯层。

  首先我们要分析一个简单的web应用程序,它监控已经登陆的用户数目并通过一个安全的jmx服务来显示该项统计。我们还将运行这个应用程序的多个实例并且从所有的运行实例中跟踪这个统计数字。当然,你可以下载这个示例web应用程序。它需要你安装j2se 5.0 sdk并且你的java_home环境变量指向基安装目录。j2se 5.0实现了1.2版本的jmx api和jmx 1.0版本的remote api。同时还需要一个支持servlet的容器;我使用的是apache tomcat 5.5.12。另外,我还使用apache ant来构建这一示例应用程序。

  二、 建立示例应用程序

  首先,你要下载示例应用程序并且使用ant war(更多的细节见build.xml中的注释)来创建一个war文件。把jmxapp.war复制到tomcatwebapps目录。假定tomcat正在运行于你的本地机器的端口8080,那么该应用程序的url将是:

http://localhost:8080/jmxapp

  如果你看到一个提示你输入名字和口令的登陆屏幕,那么一切已经就绪了。

  三、 跟踪一些有意义的数据

  本文中的应用程序使用struts框架来提交登录表单。一旦提交结束,即执行loginaction.execute(..)方法-它将简单地检查是否用户的id为"hello"以及是否其口令为"world"。如果二者都正确,那么登录成功并且控制被导向login_success.jsp;如果不正确,那么我们返回到登录表单。根据登录成功与否决定调用incrementsuccesslogins(httpservletrequest)方法还是incrementfailedlogins(httpservletrequest)方法。现在,让我们先分析一下incrementfailedlogins(httpservletrequest):

private void incrementfailedlogins(httpservletrequest request) {
 httpsession session = request.getsession();
 servletcontext context =session.getservletcontext();
 integer num = (integer) context.getattribute( constants.failed_logins_key);
 int newvalue = 1;
 if (num != null) { newvalue = num.intvalue() + 1; }
 context.setattribute( constants.failed_logins_key, new integer(newvalue));
}

  这个方法增加一个在应用程序范围存储的failed_logins_key变量。这个incrementsuccesslogins(httpservletrequest)方法是以相似的方法实现的。该应用程序追踪有多少人成功地登录和有多少人认证失败。这真不错,但是我们该如何存取这些数据?这就是引入jmx的原因。

  四、 创建jmx mbeans

  mbeans基础知识及其适于jmx架构的方面超出了本文所讨论的范围。我们将为我们的应用程序简单地创建、实现、暴露和保护一个mbean。我们所感兴趣的是暴露相应与下列两个方法的两种数据。下面是我们的简单mbean接口:

public interface loginstatsmbean {
 public int getfailedlogins();
 public int getsuccesslogins();
}

  这两个方法简单地返回成功和失败登陆的数目。loginstatsmbean的实现-loginstats,为上面两种方法提供了一种具体的实现。让我们分析一下getfailedlogins()实现:

public int getfailedlogins() {
 servletcontext context = config.getservletcontext();
 integer val = (integer) context.getattribute( constants.failed_logins_key);
 return (val == null) ? 0 : val.intvalue();
}

  该方法返回一个存储在servletcontext中的值。getsuccesslogins()方法是以相似的方式实现的。

  五、 创建和保护一个jmx代理

  管理应用程序的jmx相关方面的jmxagent类有以下几个责任:

  1. 创建一个mbeanserver。

  2. 用mbeanserver注册loginstatsmbean。

  3. 创建一个jmxconnector以允许远程客户进行连接。

   o 包含对jndi的使用。

   o 也必须有一个rmi注册运行。

  4. 使用一个用户名和口令保护jmxconnector。

  5. 分别在应用程序启动和停止时,启动和停止jmxconnector。

  jmxagent的类轮廓是:

public class jmxagent {
public jmxagent() {
//初始化jmx服务器
}
public void start() {
//启动jmx服务器
}
//在应用程序结束时调用
public void stop() {
//停止jmx服务器
}
}

  让我们理解在该构造器的这部分代码-它能够使得客户远程地监控该应用程序。

  用mbeans创建一个mbeanserver

  我们首先创建一个mbeanserver对象。它是jmx基础结构的核心组件,它允许我们暴露我们的mbeans作为可管理的对象。mbeanserverfactory.creatembeanserver(string)方法使得这一任务极为轻松。所提供的参数是服务器的域。可以把它当作这个mbeanserver的唯一的名字。然后,我们用mbeanserve来注册loginstatsmbean。mbeanserver.registermbean(object,objectname)方法使用的参数有两个:一个是mbean实现的一个实例;另一个是类型objectname的一个对象-它用于唯一地标识该mbean;在这种情况下,domain+":name=loginstats"就足够了。

mbeanserver server = mbeanserverfactory.creatembeanserver(domain);
server.registermbean(new loginstats(),new objectname(domain+ ":name=loginstats"));


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons