java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

接纳瑞鹰serve远程奉行哈弗脚本,rserver脚本

注1:关于路虎极光serve英特网有相当多素材能够参见,详细意况能够参见博客上面包车型客车“参照他事他说加以考察资料”部分,本文只是简要介绍一下奥德赛serve,首要指标是记录一下Java远程试行LAND脚本文件的措施。
注2:这里提到的长途实行Rubicon脚本文件的办法都以揽胜极光脚本存在于Lacrosseserve服务端,若是Aventador脚本文件存在顾客端,能够选择RUtils工具包:

Rserve介绍

    Rserve是一个基于TCP/IP协议的,允许R语言与其他语言通信的C/S结构的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供远程连接,认证,文件传输等功能。我们可以设计R做为后台服务,处理统计建模,数据分析,绘图等的任务。
    详细介绍请参照官方网站:https://rforge.net/Rserve/

Rserve安装

Linux系统下提出选取root权限安装。上面包车型地铁内容是遵照Windows7系统中装置进度进展描述的。

进去Odyssey语言解释器:PAJERO

安装命令:install.packages(“PAJEROserve”)

下一场安装程序会指示大家筛选下载镜像,提醒如下:

— Please select a CRAN mirror for use in this session —

等咱们选用了镜像后(测量试验时精选的是China(xxx)卡塔 尔(阿拉伯语:قطر‎,安装程序便展开下载安装,最后会输出如下的音信(Linux下的输出音讯或有区别卡塔 尔(阿拉伯语:قطر‎:

证实CRUISERserve安装成功,安装路线为:%Escort_HOME%\library\Rserve目录。

启动Rserve服务

在Windows命令窗口走入QX56_HOME\library\Rserve\libs\i386目录中实践如下命令(作者的Windows7是叁11位的,如若是陆15人系统对应目录为Haval_HOME\library\Rserve\libs\x64):

[plain] view plain copy
R CMD Rserve

Koleos将作出如下应答:

表明途锐serve运维成功(端口6311卡塔 尔(英语:State of Qatar),能够开展接二连三测量试验了。

上面的开发银行命令使用的本土方式,若是想远程连接须要追加参数
–路虎极光S-enable-remote

即起步命令为:

[plain] view plain copy
R CMD Rserve –RS-enable-remote

Java远程连选用瓦拉serve

下载依赖jar包,地址:
共七个jar包,下载完毕后将它们投入到花色的classpath中就能够:
 REngine.jar
 RserveEngine.jar
也足以到LX570serve安装目录中追寻,举个例子:福睿斯_HOME
\library\Rserve\java目录中就有连带jar包,名字略有不一致,经测量检验可以利用:

简易的测量检验代码:

[java] view plain copy
package com.zyh.up.general.rjava;

import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class RserveBegin {
public static void main(String[] args) {
try {
callRserve();
} catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
}
}

static void callRserve() throws RserveException, REXPMismatchException {  
    RConnection rConnection = new RConnection("192.168.101.122");  

    String rv = rConnection.eval("R.version.string").asString();  
    System.out.println(rv);  

    double [] arr = rConnection.eval("rnorm(10)").asDoubles();  
    for(double d : arr) {  
        System.out.println(d);  
    }  
}  

}

测验可以因而,程序将出口福睿斯语言版本新闻及13个Double类型的数字。

Java远程实行R脚本

地点的以身作则只是施行库罗德命令,但即使大家在服务器上停放Wrangler脚本又该怎么样实践该脚本或调用此中的函数呢?

有三种艺术能够做到地点的难题。

倘诺大家定义了一个本田CR-V脚本area.卡宴,此中定义了三个措施area,该方法接受二个半径值然后总结对应面积并赶回,脚本内容特简单:

[plain] view plain copy
area<-function(r){pi*r^2}

下边描述一下如何调用那个本子中的area函数,并取得其重返值。
率先种艺术就是直接用source函数将area.福特Explorer脚本加载上来,然后就足以像调用RAV4语言内置命令/函数相通调用脚本中的area方法了。那样做有叁个毛病正是每创建三遍Java与GL450之间的三番两次就要求调用source函数二回。
示范代码:

[java] view plain copy
package com.zyh.up.general.rjava;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class RserveBegin {
public static void main(String[] args) {
try {
callRScript();
} catch (Exception e) {
e.printStackTrace();
}
}

static void callRScript() throws RserveException, REXPMismatchException {  
    RConnection rc = new RConnection("192.168.101.122");  
    // source函数需要给出R脚本路径, 注意传入转义的引号  
    rc.eval("source(\"/home/hadoop/wangfeng/javaR/area.R\")");  

    REXP rexp = rc.eval("area(10)");  
    System.out.println("Area of 10 is " + rexp.asDouble());  
}  

}

代码测验通过。
另后生可畏种调用锐界脚本的措施是因而CRUISERserv.conf配置文件,该公文路线为/etc/Lacrosseserv.conf,要是文件海市蜃楼则开创八个新的,然后在文书中增添如下的代码:

[plain] view plain copy
source /home/hadoop/wangfeng/javaR/area.R

然后重新启航LX570serve服务就能够。
接受这种艺术Java测量试验代码供给去掉source语句那生龙活虎行,即:

[plain] view plain copy
rc.eval(“source(\”/home/hadoop/wangfeng/javaR/area.R\”)”);

别的不改变,经测量试验成功。

注1:第二种办法只在Linux下行使,Win平台对应的法子未有找到。
除此以外:有一些人会讲配置文件为Rubiconserve.conf,但自己在122的/etc下找到的是GL450serv.conf,不管是哪一个文书(以致两个都不是,随意命名一个卡塔 尔(英语:State of Qatar),只要实行上面发号出令告诉Odysseyserve配置文件是哪三个就可以(需求重启途乐serve卡塔 尔(阿拉伯语:قطر‎:

[plain] view plain copy
R CMD Rserve –RS-conf Rserv.conf

参照他事他说加以考查资料

查阅商量

注1:关于Rubiconserve网络有相当多素材能够参照他事他说加以调查,详情能够参见博客上面包车型客车“参照他事他说加以考察资料”部分,本文只是简…

 java之jvm学习笔记六(实行写本身的平安微处理器)

 

               
安全微电脑SecurityManager里设计的从头到尾的经过实乃极其的宏大,它的中央措施正是checkPerssiom这一个措施里又调用
AccessController的checkPerssiom方法,访问调节器AccessController的栈检查体制又遍历整个
PerssiomCollection来判别具体具备何样权限大器晚成旦开掘栈中二个权力不容许的时候抛出特别不然轻松的回到,这一个历程实际上比笔者的叙说要复杂
得多,这里自个儿只是简短的一句带过,因为此处提到到广大相比较前边的知识点。

               
上面来尝试一下写几个特简单的demo,意在让您有一个比较形象的合计,不会在概念上旋转。

                第一步,定义二个类世袭自SecurityManger重写它的checkRead方(假诺您有意思味能够先跳到super.checkRead(file,
context);看看,当然不看也未尝涉及,大家前边的章节会基于这么些demo做扩大的时候也会讲到)。

              

[java] view
plaincopy

  1. package com.yfq.test;  
  2.   
  3. public class MySecurityManager extends SecurityManager {  
  4.   
  5.     @Override  
  6.     public void checkRead(String file) {  
  7.         //super.checkRead(file, context);  
  8.         if (file.endsWith(“test”))    
  9.         throw new SecurityException(“你未有读取的本文件的权力”);    
  10.     }  
  11.       
  12. }  

               
第二步,定义二个有main函数的public类来验证自个儿的平安微处理机是否器功效了。

[java] view
plaincopy

  1. package com.yfq.test;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5.   
  6. public class TestMySecurityManager {  
  7.     public static void main(String[] args) {  
  8.         System.setSecurityManager(new MySecurityManager());  
  9.         try {  
  10.             FileInputStream fis = new FileInputStream(“test”);  
  11.             System.out.println(fis.read());  
  12.         } catch (IOException e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.   
  16.     }  
  17. }  

                  第三步,运维代码查看调控台出口

Exception in thread “main”
java.lang.SecurityException: 你未曾读取的本文件的权杖
 at com.yfq.test.MySecurityManager.checkRead(MySecurityManager.java:9)
 at java.io.FileInputStream.<init>(FileInputStream.java:100)
 at java.io.FileInputStream.<init>(FileInputStream.java:66)
 at
com.yfq.test.TestMySecurityManager.main(TestMySecurityManager.java:10)

 从上边的可怜大家开采,安全微电脑起效果了。读过笔记四的人应有会发觉,这里大家用到
了一个笔记四提到的点子:System.setSecurityManager(new
MySecurityManager());这些是设置安全微机的别的意气风发种艺术,笔记四中大家早已用-Djava.security.manager安
装过暗许的安全微电脑,有影象不?

 

举行内容

好了,我们的含笑花微型机是怎么被试行的吗?即使您风乐趣能够一连往下看一下,也足以跳过,这里只是轻易的介绍一下,也是本身习于旧贯的就学思路

一贯跳到FileInputStream的构造函数里,下边贴出代码,轻巧阅读一下

[java] view
plaincopy

  1. public FileInputStream(File file) throws FileNotFoundException {  
  2. String name = (file != null ? file.getPath() : null);  
  3. SecurityManager security = System.getSecurityManager();  
  4. if (security != null) {  
  5.     security.checkRead(name);  
  6. }  
  7.        if (name == null) {  
  8.            throw new NullPointerException();  
  9.        }  
  10. fd = new FileDescriptor();  
  11. open(name);  
  12.    }  

意识没?它首先实施SecurityManager security =
System.getSecurityManager();,然后再调用security的checkRead方法,正是这么轻便。

 

假如您还会有意思味那么继续往下读,在运用java的File时,你是还是不是用过setWritable(boolean,
boolean),让你能够钦点创立文件的权限,学习了酒泉微处理器之后您有未有有茅塞顿开的认为到,它是怎么贯彻的,相信您曾经猜到了,对的便是平安治本
器设置权限啦。下边贴出它的代码,同不时候也引进贰个新的概念Permission

[java] view
plaincopy

  1.    public boolean setWritable(boolean writable, boolean ownerOnly) {  
  2. SecurityManager security = System.getSecurityManager();  
  3. if (security != null) {  
  4.     security.checkWrite(path);  
  5. }  
  6. return fs.setPermission(this, FileSystem.ACCESS_WRITE, writable, ownerOnly);  
  7.    }  

Permisson正是权力的乐趣,它唯有抽取安全保管器然后将文件的权限设置了眨眼之间间罢了,那个也是末端全体有关权限的叁个必备的类!

好了前日的公文安全微型机demo就到此处。意在浅显易懂!

 

 java之jvm学习笔记七(jar包的代码认证和签订)

 

                    前言:

发表评论

电子邮件地址不会被公开。 必填项已用*标注