web访问xen实例console

为了解决该问题,花了一星期,网上的资料很零散,总结下中间遇到的问题与解决方法

基本概念

了解基本概念可以方便我们搜索查询

        xen:hypervisor

        xenserver:hypervisor+api+tools(企业)

        xcp:hypervisor+api+tools(社区)

        xenapi:The management API exposed by XenServer and XCP.

        xapi:The primary daemon on XenServer and Xen Cloud Platform; The one that exposes the XenAPI.

        xencenter:客户端(应用程序),不支持api调用。

        控制台流程:client(浏览器)——xenserver(API):必须确保客户端(浏览器)与vm所在xenserver能够直接通信

样例说明

xapi-console:https://github.com/xapi-project/xen-api

        其中xapi项目是针对xenapi的使用样例,这个是关键。我使用的是上面地址内的java包下的源码,注意使用这些源码需要引用xenapi相关依赖jar包。

        1.除了上面地址中的源码外,你需要xenserver.jar,ws-commons-util.jar,xmlrpc-client.jar,xmlrpc-common.jar四个jar包依赖。这些包可去官方下载,或者通过maven库下载。

        2.除了上面地址中的源码外,你需要xenapi的源码和额外的ws-commons-util,xmlrpc-client,xmlrpc-common三个jar包,依赖说明可以参考官方文档,下载可以通过maven库。

         以上两种方法都行,意义在于理解xapi项目与xenapi项目的区别。

        上面地址中的java源码介绍,主要关注三个java文件和一个html文件,Initialize.java和examples下的两个java文件,console.html文件,其中console.html告诉我们如何引用java applet插件,examples下的两个java可以直接以应用程序运行,主要告诉我们如何获取vm,获取vm的console,如何使用VNC获取console流。Initialize.java是个标准的applet,也就是console.html里引用的插件,你可以修改Initialize.java以达到你想要的场景。

         关于html引用applet的说明:codebase的路径不可以在WEB-INF下;archive默认去codebase下加载指定的包(xenapi相关的四个和上面xapi-console源码打包的jar),code也是默认去codebase下加载;<PARAM>标签为参数值,html如何向applet传参可以百度。

          以上基本就完成了编码工作,剩下的就是经常遇到的问题,无法加载和显示applet,无法读取xenserver的console流

无法加载applet

           安装JRE插件,将url添加到客户端JRE的例外站点中。windows下控制面板——java程序——安全。

           根据错误日志不断修改code,codebase,archive内容,直到能加载出来按钮。

无法读取console流

            对上面的五个jar进行签名,流程如下:

            使用keytool工具生成密匙库 

                    1.keytool工具位于${java_home}/bin目录下; 

                    2.在DOS窗口中执行命令:keytool -genkey -keystore mytest.store -alias mbq 

                    注意:mytest.store 是你的密匙库的名称,可以随意修改,后缀请不要修改! 

                    如果需要可以添加参数DOS命令keytool -genkey -keystore mytest.store -alias mbq -validity 3650

                    -validity 3650 表示的是有效期是3650天,默认情况是六个月有效期。

                    mbq 为别名,这个也可以改成自己的名称 

                    3.执行上述命令后,DOS窗口中会提示你输入keystore的密码、你的姓名、组织单位等等信息。

                    这里要注意的是输入密码请记住,后面要用到的。在最后,我们输入y确认信息。

                    然后再直接回车设置mbq的主密码和store密码一致即可! 

            使用keytool工具导出签名时用到的证书 

                    1.在DOS窗口中执行命令:keytool -export -keystore mytest.store -alias mbq -file mbq.cert 

                    注意:mytest.store 就是第二步生成的密匙库名称 

                    mbq 也是在第上一步中我们指定的别名 

                    mbq.cert 为我们生成的证书的名称,可以自己修改名称,注意后缀不要改 

                    2.命令执行成功,我们会在当前目录下找到一个mbq.cert文件,这个就是我们刚才生成的证书。 

            使用jarsigner工具签名jar压缩文档 

                    1.jarsigner工具位于${java_home}/bin目录下; 

                    2.在当前DOS窗口中执行命令:jarsigner -keystore mytest.store mytest.jar mbq 

                    注意:mytest.store 就是我们在第二步中生成的密匙库名称 

                    mytest.jar 就是我们要签名的五个包

                    mbq 是提供者的名称,我们这里设置为我们的别名 

                    修改客户端的程序是需要重新打包和签名。

            创建mytest.policy文件 

                    1.在当前目录下创建一个mytest.policy文件,其内容如下: 

                    keystore"file:mytest.store","JKS"; 

                    grantsignedBy"mbq" 

                    { 

                    permission java.io.FilePermission"<<ALLFILES>>","read"; 

                    }; 

                    2.这个文件的意思就是说让所有由mbq签名的applet都可以对本地的所有文件进行读操作。 

            保证五个签了名的jar和.policy策略文件,.cert证书文件,.store密钥库文件,都在codebase目录下。

偶尔被安全策略阻止

            这个问题一直无法找到原因,可能是浏览器阻止后提示消失,我们无法进行允许确认。

            需要修改JRE下的/lib/security/java.policy,在grant内添加

            permission java.net.SocketPermission "*", "accept, connect, listen, resolve";

            permission java.security.AllPermission;

            permission java.io.FilePermission "<<ALL FILES>>", "read,write";

参考文档

            http://www.cnblogs.com/tqsummer/archive/2011/01/19/1939013.html

你可能感兴趣的:(java,Web,console,xen,vnc)