动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.StrutsVSTurbine.
.Java 国际化和本地化 Toolkit 2..
.JAVA的动态编译和静态编译.
.利用Java实现zip压缩/解压缩.
.封装JNDI操作LDAP服务器的工具类.
.如何在J2ME的低级界面中轻松实现.
.实现对象序列化接口.
.Java Threading中的final变量.
.HelloWorld攻略.
.GetDriveName 方法.
.java初学者必读-经验总结(3).
.Java应用程序本地编译为EXE的几种.
.JAVA学习,是一条漫长的道路.
.Struts网站动态导航系统设计思路.
.编辑Java类对象.
.编程必备经典:Java常见问题集锦(.
.Struts行为测试框架StrutsTestCa.
.Java 在Client/Server 网络中的应.
.驯服 Tiger:线程中的默认异常处.
.技术分析:使用Eclipse进行SWT编程.

通过自建代理服务器增强 Applet 的功能

发表日期:2008-1-5 |



众所周知,Java小应用程序(Applet)在网络应用方面有着十分强大的功能,但是由于其存在着安全隐患,所以对于"她"的使用,JAVA语言做了很多的限制,想必大家都已经很清楚了,其中最让人不开心的就是,小应用程序只能够连接提供网页的计算机(Applet必需嵌入到一个Html页面中才能得以发布),但如何将您的小应用程序分发出去呢,这就是我们要讨论的。
JAVA语言的"强项"就在于其网络功能的强大和操作的简易性,而小应用程序(Applet)作为JAVA技术的一部分,更是"锦上添花"。然而,您可否碰到过这样的事情呢,"辛辛劳苦"做出了一个自认为很出色的Applet,可是运行时,却是"千呼万唤,她也不出来",原因何在呢,那就是JAVA语言对Applet的安全性做了多方面的限制,现在就让我们了解一下吧!

Applet的安全性
您有没有想过,通过Applet来连接一个网络服务器;您有没有想过,通过Applet来访问本地的文件,……。我想您一定做过不少的尝试,但结果总是让人难以满足,原困就是JAVA语言对Applet技术做了多方面的限制。

"Applet只能把电话打回家里"(摘自《JAVA2核心技术》),什么意思?大家不要会错意了,这是说,网络浏览器只答应一个小应用程序在给它提供服务的主机读取和写入数据。Applet只能连接其所驻留的计算机的套接字。

乍看起来,这个限制似乎毫无意义:为什么这个小应用程序被禁止执行四周浏览器一直在执行的操作,即是从网络上某台主机获取数据的操作。也许大家有些不大明白,让我们具体化这三个相关的主机,会有助于理解这个基本原理(参图一)。

源主机--给客户发送网页和JAVA小应用程序的计算机。
本地主机--运行你的小应用程序的用户计算机。
你的小应用程序预备访问的第三方的数据存储库。

图一 Applet安全性不答应连接第三方数据

Applet安全性规定:

Applet只能读取源主机上的数据。
Applet不能写入本地主机。
Applet不能读取本地主机上的数据。

不能让小应用程序写入本地主机是因为Applet可能会向本地主机传播病毒或修改它上面的重要文件,所以我们要保护运行小应用程序的客户机;不能让小应用程序读取本地主机的信息是因为本地可能保留着用户银行卡数字等这类敏感的信息,因为小应用程序支持多线程,当你打开一个漂亮的页面,使用它上面提供的有用的功能时,你可能不会意识到这个小应用程序背后的其它线程在做些什么。所以说,不能让小应用程序对本地计算机进行读写操作是同样重要的。

这样还可以理解,但为什么这个小应用程序不能从网上读取其它文件呢?网络不正是一个公用信息资源库吗?难道不是每个人都可以从网上读取信息吗?假如你在家里利用括号设备访问Internet的话,可能是能够随心所欲的。但是你假如是一名公司的职员,在公司内部使用网络资源,正好你们所在公司又恰好安装了防火墙(FireWall),那么情况就完全不一样了。

假如要具体介绍防火墙,可能最近几天大家都有不要睡觉了,所以这里只是说一下防火墙的功能。可以这样理解一个防火墙就是一个计算机,它过滤进出公司局域网的数据包。通过对安全策略的设置,它可以完成很多功能。例如:它可以拒绝局域网内除了邮件服务器以外的所有主机上邮件端口的访问请求防火墙也可以过滤公司局域网与Internet之间的通信规则,所有的这些完全取决于安全的需要。(参图二)

图二 利用防火墙提供安全性

拥有一个防火墙可以让一个公司利用网络向雇员发送对他们有重要意义的内部信息,但同时拒绝来自公司外部的访问。一个公司只需简单的安装一台网络服务器,把其地址通知全部的雇员,并设立防火墙以拒绝任何来自公司外部的访问这个服务器的请求。而公司的职员可以用安全的使用公司内部的网络,浏览服务器。

假如一个雇员访问了你提供的网页(含有Applet的网页),那么就会有一个小应用程序被下载到装有防火墙的计算机并开始在那里运行。假如这个小应用程序可以读取它驻留的浏览器读取的所有网页,就可以访问这个公司内的住处接着,它可以连接一个主机,并利用这个主机接收和送回所有私人信息。显然这是不安全的。

这简直太糟糕了,真的,你不能自己编写运行于网上的小应用程序,获取信息,处理和格式化这些信息,并把它们发送给Applet用户。假如,我们的小应用程序只是想得到一些信息,而并不想向它的主机写回任何信息,难道这样也不行吗?为什么不能让浏览器和这个小应用程序签一个协议呢?假如这个小应用程序答应不向任何地方写入数据,那么它应该能读取任何地方的数据。这样的话,她只充当一个住处捕捉者和处理者,并在用户屏幕显示瞬息的结果。(实现上,这是可行的,这就是目前最为流行的"数字签名技术",以后我们在作介绍,这里我们介绍的是另外一种解决方法。)

代理服务器
除了"数字签名技术"这种高级技术外,我们还可以使用其它的方法来加以实现。比如,你可以建一个网页,它可以内嵌你想要运行的小应用程序(这时它用的是存储你的服务器的假数据)。你可以提供一个按钮,用户可以使用这个按钮下载这个小应用程序和相应的策略文件,这样用户就可以从这个小应用程序运行的浏览器中运行它了。虽然这是一个可行的方法,但却使你的小应用程序的"魅力"大打折扣。好在还有另外一种方法。

代理服务器方法是另外一种突破安全性的限制,实现信息的提取,现在我们就具体的介绍一下。

在你的WEB服务器上安装一个代理服务器。它是一个服务程序,随着服务器的启动而自动运行,这个程序可以获取来自于网页的请求信息,并发送给请求它的任何人。举个例子来看一下:假设你的小应用程序向驻留在同一台主机上的代理服务器发关一个GET请求
http://www.server.com/proxysvr?URL=http://www.yahoo.com/search.pl?Name=java

那么代理服务器会为这个小应用程序取回网页,并把它做为GET请求的答复发送回来,这样小应用程序就可以处理取回的信息了(参图三)

图三 通过代理服务器获取数据的流程

由此可见代理服务器可以实现这个功能,但现有的代理服务器都是功能丰富,而我们只是利用它的最基本的功能,所以建议大家用JAVA自己写一段代码。我们是用Servlet来实现的,一个Servlet是由一个Servlet引擎来启动的。现在大部分的网络服务器都可以运行Servlet。
代理服务器源代码(ProxySvr.java)

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ProxySvr extends HpptServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws SevletException, IOException {
String query = null;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
query = request.getParameter("URL");
if(query == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Missing URL parameter");
return;
}
try {
query = URLDecoder.decode(query);
} catch(Exception exception) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"URL decode error " + exception);
return;
}
try {
URL url = new URL(query);
BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String line;
while((line = in.readLine()) != null)
out.println(line);
out.flush();
} catch(IOException exception) {
response.sendError(HttpServletResponse.SC_NOT_FOUND,
"Exception: " + exception);
}
}
}

说明:WEB服务器的Servlet服务接收到一个GET请求时,它调用doGet()方法。HttpServletRequest参数包含请求参数。这个Servlet用getParameter()方法得到URL参数的值。在任何Servlet中,你需要把响应答复发送给HttpServletResponse类的getwriter()方法返回的PrintStream,这个Servlet连接URL参数指定的资源,每次读取它的数据,并把它发送给响应流。最后,用sendError()方法报告出现的错误。

小结
现在让我们回顾一下为什么代理服务器可以解决这个小应用程序的安全问题。当你的小应用程序要访问来自异地主机的信息时,它会将请求发送给驻留在本机上的代理服务器,然后代理服务器连接要访问的异地主机,取出所要求的数据,然后将数据返回给小应用程序。

虽然几经周折,但是却可以避免安全性的问题。OK,这也许并不是最好的解决方案,但是,它确实是一种实用的解决方案,欢迎大家一起研究。

参考资料

下面是上述程序的源代码(ZIP格式)ProxySvr.zip
《JAVA2核心技术》机械工业出版社
java.sun.com http://java.sun.com/docs/books/jls/index.html

--摘自IBM网站
http://www-900.ibm.com/developerWorks/cn/java/l-papplet/index.shtml
上一篇:图片的预先读取-加快下载速度 人气:900
下一篇:为什么要自己写底层涵式? 人气:415
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成