设为首页 收藏本站
查看: 1002|回复: 0

[经验分享] 用Java实现FTP批量大文件上传下载(四)

[复制链接]

尚未签到

发表于 2015-11-6 11:32:22 | 显示全部楼层 |阅读模式
  

六、FTP端口映射

  FTP的数据连接有PASV和PORT两种,如果你的FTP服务器位于内网中,需要做端口映射。笔者刚开始时对FTP的网外网映射也是不怎么了解,因此开始走了不少的弯路,开始一直以为是自己的程序有问题,浪费了不少时间,希望通过这段,能让大家在开发的时候少花或不花这些无谓的时间与精力。
  PCD上曾经有一篇文章介绍过一种直接访问内网的方法,其实我们只要用端口映射工具,就可轻松实现穿透内网的目的。“端口映射器”就是一款这样的工具,更值得一提的是,它摆脱了命令行模式,提供了图形界面的操作环境。
  为了让各位能更加明白,先说一下原理。假设现在有一个局域网,主机为A,局域网内除了主机外,还有一台机器为B,B机器当然是通过主机A上网的。另外还有一台可上网的机器为C,与A和B并不在一个局域网内。通常情况下,C机器只能访问到A主机,而无法穿透局域网,访问到B。而通过端口映射后,当C机器访问主机A的指定端口时,主机A上的“端口映射器”就起作用了,它会把指定端口上的数据转到局域网内另一台机器的指定端口上,从而实现访问内网机器的目的。这样说,大家明白了吧。至于具体的如何进行配置,笔者认为应该不是件很难的事情,再说,网上这样的图形解释很多,请大家参考网络上的文章进行设置。
  当然,实现直接访问内网的优点是显而易见的,别的不说,起码FTP资源是被充分利用了。不过必须提醒读者的是,直接访问内网可能使内网的安全性受到威胁。笔者相信大部分朋友对主机安全的重要性还是重视的,但往往会忽略内网机器的安全设置。一旦你实现了直接访问内网,那就必须像对待主机一样对待内网机器,否则你的整个网络将可能处于危险状态。
  六、    访问客户端资源
  
  Java应用程序环境的安全策略,对于不同的代码所拥有的不同资源的许可,它由一个Policy对象来表达。为了让Applet(或者运行在 SecurityManager下的一个应用程序)能够执行受保护的行为,例如读写文件,Applet(或 Java应用程序)必须获得那项操作的许可,安全策略文件就是用来实现这些许可。
  Policy对象可能有多个实体,虽然任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用getPolicy方法得到,也可以通过调用setPolicy方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明哪些代码可以访问哪些资源。策略文件可以储存在无格式的ASCII文件或Policy类的二进制文件或数据库中。本文仅讨论无格式的ASCII文件的形式。
  在实际使用中,我们可以不需要自己手动去编写那么复杂的java.policy文件,特别是在不使用数字签名时。这时,我们完全可以借鉴JRE提供给我们的现成的 C:\Program Files\Java\jre1.5.0_12\lib\security\java.policy文件,根据我们的需要做相应的修改,本文就针对不使用数字签名情况编写安全策略文件。下面,是一个完整的在Windows NT/XP下使用的java.policy文件。在文件中,分别使用注释的形式说明了每个“permission”记录的用途。当然,不同的程序对资源访问权限的要求可能不一样,可以根据项目需要进行调整与选择。
  grant    {
//对系统和用户目录“读”的权限
permission    java.util.PropertyPermission    "user.dir",    "read";   
permission    java.util.PropertyPermission    "user.home",    "read";   
permission    java.util.PropertyPermission    "java.home",    "read";   
permission    java.util.PropertyPermission    "java.class.pat",    "read";   
permission    java.util.PropertyPermission    "user.name",    "read";   
//对线程和线程组的操作权限
permission    java.lang.RuntimePermission    "accessClassInPackage.sun.misc";   
permission    java.lang.RuntimePermission    "accessClassInPackage.sun.audio";   
permission    java.lang.RuntimePermission    "modifyThread";   
permission    java.lang.RuntimePermission    "modifyThreadGroup";   
permission    java.lang.RuntimePermission    "loadLibrary.*";   
//读写文件的权限
permission    java.io.FilePermission    &quot;<<ALL    FILES>>&quot;,    &quot;read&quot;;   
permission    java.io.FilePermission    &quot;${user.dir}${/}jmf.log&quot;,    &quot;write&quot;;   
permission    java.io.FilePermission    &quot;${user.home}${/}.JMStudioCfg&quot;,    &quot;write&quot;;   
permission    java.net.SocketPermissio    &quot;*&quot;,    &quot;connect,accept&quot;;   
permission    java.io.FilePermission    &quot;C:\WINNT\TEMP\*&quot;,    &quot;write&quot;;   
permission    java.io.FilePermission    &quot;C:\WINNT\TEMP\*&quot;,    &quot;delete&quot;;   
permission    java.awt.AWTPermission    &quot;showWindowWithoutWarningBanner&quot;;   
permission    javax.sound.sampled.AudioPermission    &quot;record&quot;;   
// //操作Socket端口的各种权限
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;listen&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;accept&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;connect&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;resolve&quot;;   
permission    java.security.AllPermission;   
};
grant    signedBy    &quot;saili&quot;    {  
permission    java.net.SocketPermission    &quot;*:1024-65535&quot;,    &quot;connect,accept,resolve&quot;;   
permission    java.net.SocketPermission    &quot;*:80&quot;,    &quot;connect&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;listen,    accept,    connect,    listen,    resolve&quot;,    signedBy    &quot;ganja&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;accept&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;connect&quot;;   
permission    java.net.SocketPermission    &quot;-&quot;,    &quot;resolve&quot;;   
permission    java.security.AllPermission;   
};





  笔者在本项目中,为了使用客户端的用户设置更加的方便与简单,将上面的文件采用VB或C#来做成一个小程序来写。然后将JRE及些exe共同打成一个EXE包,当JRE安装完成后,此小程序负责找到JRE在操作系统中的安装路径,并在程序中写出此java.policy文件,覆盖原有的文件。如此一来,用户就只需安装一个EXE文件,从而简化了安装的操作次数。
  
  七、Applet回调服务器
  
  JavaScript与Applet之间能够相互通讯给我们带来了很多方便,Java与JavaScript互相补充,以开发功能更完美的Web应用程序。B/S下能够充分利用java的优势,给我们带来更多的网络体验,方便用户。笔者用的比较多的是利用Swing组件开发的应用程序利用Applet实现B/s下架构,这样能够充分显示Swing组件的优势,便于系统升级,便于维护;还有就是在WEB下,有时客户端要使用本地的硬件资源,笔者所知道的是通过Applet来实现,通过Applet去调用javaAPI来实现。 我们具体来看看JavaScript与Applet之间到底是怎样通讯的呢?
  1.JavaScript访问Applet

<applet name=&quot;appletName&quot; ....../>//JavaScript访问Applet属性。
window.document.appletName.appletField (属性必须是public的,&quot;window.document.&quot;也可以不写) //JavaScript访问Applet方法。
window.document.appletName.appletMethod (方法必须是public的,&quot;window.document.&quot;也可以不写)。
  

2.Applet访问JavaScript
  Live Connect提供了Java与JavaScript的接口,可以允许在Java Applet小程序中使用JavaScript。
  需要用到一个jar包,在C:\Program Files\Java\目录下找,大概有5M多,其实就是打开看哪个有netscape.javascript.JSObject。如果没有装个NetScape或从网上下都可以。 可以把它重命名为netscape.jar(不是必须的),一定要加入到classpath,目的是使开发的时候能够编译。特别注意的是:部署时不需要包括netscape.jar,因为整个包会下载到客户端,影响速度。

//引入netscape类
import netscape.javascript.JSObject;
import netscape.javascript.JSException; //可允许在小程序中处理异常事件
public void callJavaScript(String callBackJavascript) {
JSObject window = JSObject.getWindow(this); // 获取JavaScript窗口句柄,引用当前文档窗口
JSObject docment = (JSObject) window.getMember(&quot;document&quot;);
form=(JSObject)doc.getMember(&quot;textForm&quot;); //访问JavaScript form对象
textField=(JSObject)form.getMember(&quot;textField&quot;);访问JavaScript text对象
text=(String) textField.getMember(&quot;value&quot;); //获取文本区的值
// 调用JavaScript的alert()方法
// window.eval(&quot;alert(\&quot;This alert comes from Java!\&quot;)&quot;);
window.call(callBackJavascript, null);// 参数用数组的形式表示。
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135845-1-1.html 上篇帖子: Windows FTP Error 425: Unable to build data connection 下篇帖子: 安装vsftp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表