文章目录

  • web rdp预研 web应用程序部分
    • 预研目的
    • 相关基础
    • Web应用结构(框架)
    • 配置tomcat运行web项目
    • 与前端交互原理
    • 问题整理
    • Java web基础知识
    • Java web调试
    • 预研结论

web rdp预研 web应用程序部分

⭐️来自很多年前的笔记,只是一个归档,不做更新!⭐️

预研目的

1、预研官方教程
学习官方java、前端代码,构建自己的web应用程序,使用guacamole api 和Maven,学会如何编译打包该项目war。
正如官网所言Guacamole 是一个API,其中一个使用guacamole最好方式是构建自己的Guacamole驱动web应用程序。

相关基础

Guacamole有一个代理守护进程guacd,它用于通信使用远程桌面协议。从web应用程序角度,它不关注guacd动态加载协议插件。Web应用程序关注的只是连接到4822(guacd默认监听端口),使用guacamole协议。

官方提供了一些简单的java api(java类)已经实,现了guacamole协议,用于guacd和javascript之间传递。

利用这些java类的一个典型的web应用程序只需要以下内容。

  1. 一个类继承自GuacamoleHTTPTunnelServlet,该类作用是提供HTTP-based隧道在javascript客户端(guacamole-common-js)和guacd。

GuacamoleHTTPTunnelServlet是一个抽象类,做为Guacamole API已经提供了多种方法,方便你使用隧道。

如果您不想使用这个类,而是使用自己的隧道机制,如WebSocket,这很好;JavaScript (guacamole-common-js)对象(js对象guacamole)提供了一些通用的接口。

  1. 一个web网页包含js文件(guacamole-common-js),使用client和 tunnel对象连接web应用程序。

JavaScript API包括了作为client的Guacamole协议的完整实现、HTTP隧道和websocket隧道的实现,以及鼠标/键盘/触摸输入抽象。
JavaScript的鼠标和键盘支持是非常繁琐的,Guacamole client对象提供了与其他组件api交互。

如何你想实现认证,你可以继承GuacamoleHTTPTunnelServlet等,官网就是这么实现的。你还可以封装做很多事,这些的基础都很简单:你有一个隧道,允许JavaScript客户端与guacd沟通,你有js client客户端,在guacamole-common-js最难的部分已经提供。

Web应用结构(框架)

官方guacamole项目使用Maven构建的。官方Guacamole项目有一个Maven仓库对于java和javascript APIs,写一个基于guacamole应用使用Maven会更加容易。Maven将自动下载和使用Guacamole API。

  1. pom.xml
    所有的Maven项目必须有一个项目描述文件pom.xml文件,在项目的根目录。
    这个文件描述了项目依赖和一些构建必须。
    不像其它构建工具如apache ant 或 gnu autotools,Maven依照配置文件约定:项目文件必须放置到特定位置,项目依赖必须完整的描述在pom.xml中。做到这些,构建将能自动化。

2.WEB-INF/web.xml
在项目构建之前,需要一个web应用程程序部署描述文件web.xml。这个文件是JAVA EE构建.war的必须文件,可以被服务容器(servlet container)读取,当web应用程序部署时。对于Maven构建.war时,使用该文件,它必须放置在src/main/webapp/WEB-INF/

  1. index.html
    有了web.xml文件以及pom.xml,web应用程序将成功构建。

  2. 更新pom.xml
    有了基本的pom.xml,我们需要修改pom.xml指定哪些组件会被使用。
    可以看到官方源码项目,这些都已经写好。注意有两个要注意的点:

  1. 指定我们要使用的java版本。
  <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.6</source><target>1.6</target><compilerArgs><arg>-Xlint:all</arg><arg>-Werror</arg></compilerArgs><fork>true</fork></configuration></plugin>
  1. 我们需要来自guacamole-common-js的文件自动包含在.war中。
  1. 编译和打包apache guacamole
  1. 运行 mvn 包
$ mvn package

Maven将下载任何需要依赖用于构建.jar文件。一旦所有依赖被下载, .war文件将被创建到当前目录的guacamole/target/子目录

此命令包含一系列过程:validate–>compile–>test–>package。

Maven根据pom文件里packaging的配置,决定生成jar文件还是war文件,并放到target目录下。

此命令需要在项目的根目录(也就是pom.xml文件所在的目录)下运行,maven才知道打包哪个项目。

  1. 拷贝.war文件到你的web容器中。
  1. 编译遇到问题
    因为没有联网,
    单独编译模块guacamole-example报
    Error:(22, 26) java: 程序包javax.servlet.http不存在
    单独编译模块Guacamole库 报
    Error:(23, 23) java: 程序包javax.websocket不存在

思路:

  1. 用能联网的设备下载一次,copy下载到本地的jar文件到你的本地仓库(Z:\Users\callee.m2\repository)。
  2. 搭建本地私有仓库nexus。

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。
推荐此方法(测试通过):cp你成功下载的Z:\Users\callee.m2\repository目录,到你IDEA文件配置里面maven目录下的conf/setting.xml中设置你的本地缓存repository目录。

至此,你用IDEA,选择build,可以构建生成任意模块的的class文件。
仍然找不到.war。
生成.war就是打包,打包.war,无非就是将web目录下的文件打包,即做成文件夹,把web目录下的目录放入到这个文件夹。

如果有勾选Build on make选项,可以在运行项目时生成.war包。如果没有勾选,可以通过Build–>Build Arifacts来完成war包。

配置tomcat运行web项目

  1. 配置tomcat容器
    打开菜单Run–>选项Edit Configuration
    点击+号,选择Tomcat Server -->选择“Local”
    点击”Application server”后面”Configue…”,弹出Tomcat Server窗口,选择本地安装的Tomcat目录–>OK

  2. 在tomcat中部署并运行项目
    再次进入部署界面

    点击 + 在Deployment中,选择要部署的工程。
    此处选择xxx.war作为部署包。添加访问路径 Application context,一般为项目名,然后点击OK。如这里的test,它会在tomcat的webapp根目录下创建这个test目录。

在主界面中Application Servers中就可以看到部署的工程,点击Run/Connect就可以运行Tomcat服务器。
点击Run即可运行tomcat服务器。

与前端交互原理

  1. 第一次请求java处理流程
    通过web.xml部署描述文件,看到一个过滤器类,监听器。跟踪Listener是监听器,用于监听Servlet。
    GuacamoleServletContextListener它会初始化执行,实例化两个类
    environment = new LocalEnvironment(); // 读取guacamole.properties文件,获取到连接mysql信息sessionMap = new HashTokenSessionMap(environment);//会话实例

  2. 登录流程分析

  1. 前端请求http://10.0.8.103:8080/guacamole/api/tokens
    POST传
    username:admin
    password:admin
    认证使用的类文件
    org\apache\guacamole\rest\auth\AuthenticationService.java
    中的authenticate方法具体处理认证:对比账号密码
    –>authenticate该函数执行具体的认证对比
    –>authenticateUser 可以同时支持多种认证,循环多种认证方式,验证用户
    然后调具体的拓展类的authProvider.authenticateUser(credentials);
    –>return authProviderService.authenticateUser 来自org/apache/guacamole/auth/jdbc/JDBCAuthenticationProviderService.java
    最终真正的对比验证密码在:
    org/apache/guacamole/auth/jdbc/user/UserService.java的
    public ModeledAuthenticatedUser retrieveAuthenticatedUser方法:
    先是查库,检查用户名,库中有该用户名再进行下一步,
    // Retrieve corresponding user model, if such a user existsUserModel userModel = userMapper.selectOne(username);
    发现userMapper.xml中有id为selectOne的元素,内容即为查库的sql语句。
    验证密码
    // Verify provided password is correctbyte[] hash = encryptionService.createPasswordHash(password, userModel.getPasswordSalt());if (!Arrays.equals(hash, userModel.getPasswordHash())) return null;

  2. java处理 关键字/api
    serve(“/api/*”).with(GuiceContainer.class);
    配置GuiceContainer类(servlet)对所有以/api/开头的进程服务。路径风格语法注册servlet。

问题整理

  1. 编译打包的war部署到tomcat中,打不开,发现有两个500响应,界面空白

    在项目代码中,全局搜索app.js,发现是java处理的动态生成,你在服务器端是找不到这两个文件的。
    问题分析定位,在项目中全局搜素app.js,不是服务器本身存在的,是java动态生成的。Java读取/guacamole.min.js /guacamole.min.css 动态生成的app.js和app.css。编码打包的war中没有这两个文件。从官方.war中解压的包中,copy出来即可。

// Dynamically generate app.js and app.css from extensionsserve(“/app.js”).with(new ResourceServlet(new SequenceResource(javaScriptResources)));serve(“/app.css”).with(new ResourceServlet(new SequenceResource(cssResources)));

为什么没有压缩打包js、css呢?
Guacamole模块的pom.xml中有描述JS/CSS Minification Plugin 该插件

思路1:分析guacamole-common-js模块,不能正常压缩打包的原因。似乎是minify-maven-plugin这个插件的问题。
思路2:直接把这两个压缩好的文件,放到源码的guacamole\src\main\webapp下。到时打包war自动会打包上。
暂时使用思路2,测试通过。

  1. window下mysql认证方式配置
    在启动服务时候,获取guacamole配置文件路径
    environment = new LocalEnvironment();
    它是同时可以有多种认证方式,在加载拓展是加载相关的认证类实例。
    private void loadExtensions(Collection javaScriptResources, Collection cssResources)
    –>如下,在guacamole配置路径下,找目录extensions
    File extensionsDir = new File(environment.getGuacamoleHome(), EXTENSIONS_DIRECTORY);
    本例中,位置如下:Z:\Users\callee\guacamole\extensions
    把你下载的数据库认证拓展jar文件解压放置到该目录即可。
    同时注意要下载mysql数据库连接jar文件到lib目录(lib目录和extension同级)。

报错:### Cause: java.sql.SQLException: Access denied for user ‘guacamole_user’@‘10.0.8.89’ (using password: YES)
发现连接的是tomcat所在ip,因此,需要在配置文件Guacamole.properties中指定mysql服务地址信息。经测试 是配置文件中mysql密码填错了。

Guacamole.properties是guacamole的主要配置文件。这个文件决定了guacamole如何连接guacd,也会配置安装的 拓展验证属性。

guacamole.properties配置如下:

#guacd properties
guacd-host: 10.0.8.103
# MySQL properties
mysql-host: 10.0.8.103
mysql-hostname: 10.0.8.103
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: root
mysql-password: 123456

Java web基础知识

略。需掌握基础知识:
1) 理解并掌握servlet生命周期,接口servlet,以及实现类HttpServlet。
2) 服务器传递给servlet的对象Request、Response、ServletConfig对象、ServletContext(代表当前应用)、session、cookie。 掌握servlet常用api。
3) JDBC
4) Java注解、依赖注入概念知识点、
5) Guice轻量级依赖注入框架知识

Java web调试

IDEA常用调试快捷键
F8 单独调试
F7 跳入该方法
Shift + F8 跳出该方法
F9 走到下一个断点

预研结论

代码可控,项目成功编译打包,达到预期。

guacamole 纯web rdp预研:web应用程序部分相关推荐

  1. Flutter for Web 详细预研

    背景 Google在最新的Google I/O上推出了Flutter for Web,旨在进一步解决一次代码,多端运行的问题.Flutter for Web还处于早期试验版,官方不建议在生产环境上使用 ...

  2. 嵌入式web服务器预研报告(转)

    现在在嵌入式设备中所使用的web服务器主要有:boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. Boa 1.介绍 Boa诞生 ...

  3. ftp 文件服务器预览,web文件服务器 ftp 预览

    web文件服务器 ftp 预览 内容精选 换一换 该任务指导用户使用Loader将数据从HBase导出到SFTP服务器.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授权访问作业执 ...

  4. Web方式预览Office/Word/Excel/pdf文件解决方案

    Web方式预览Office/Word/Excel/pdf文件解决方案 参考文章: (1)Web方式预览Office/Word/Excel/pdf文件解决方案 (2)https://www.cnblog ...

  5. web返回的数据集格式_200G倾斜数据无插件web端预览!兼容三端,有容乃大—MapGIS M3D数据格式...

    "有容乃大"最早见之于明代兵部尚书太子太保袁可立在河南睢州自己"弗过堂"中所著的自勉联.二百年后又有清末民族英雄林则徐题于书室的八字联:"海纳百川,有 ...

  6. WEB在线预览PDF,WORD方案总结

    好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 目录 一.PDF的预览方式 1.PDFObject 2.PDF.JS 3.jsPDF 4.jQuery Media ...

  7. 使用kkfileview实现web在线预览

    使用kkfileview实现web在线预览文件 场景:一个业务场景是,针对单据上传附件(放到FTP),后续通过web实现对附件的在线预览打印 使用工具 :kkFileView 官网地址:https:/ ...

  8. Web实时预览 界面组件Telerik——提高开发者工作效率的完美组合

    Telerik DevCraft包含一个完整的产品栈来构建您下一个Web.移动和桌面应用程序.它使用HTML和每个.NET平台的UI库,加快开发速度.Telerik DevCraft提供最完整的工具箱 ...

  9. 关于虚拟机纯命令行centos解决web上网认证的解决方案

    关于虚拟机纯命令行centos解决web上网认证的解决方案 虚拟机版本:CentOS Linux release 7.1.1503 (Core) 在我们学校,有校园网的存在,导致我在配置虚拟机的时候遇 ...

最新文章

  1. 数学等于号是=那三个横杠是什么符
  2. 计算机程序c复杂,《计算机程序设计(C语言)》见面课答案
  3. golang中的strings.Replace
  4. java和equals区别_JAVA中==与equals的区别
  5. 发布nuget包的正确姿势---cicd自动打包发布
  6. cobol to java_cobol to java
  7. python变量类型之间转换_python学习笔记5—数据类型转换
  8. matplotlb 进阶之Styling with cycler
  9. 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder
  10. ML--HMM(隐马尔可夫模型及python的实现2)
  11. php迅雷地址解析,迅雷地址在线解密–PHP源码
  12. struts2拦截器添加及xss攻击的处理
  13. html预览页面做成a4纸,html页面,A4纸竖向打印,网页页面的宽度应该设置成多少?...
  14. pytorch-实现天气识别
  15. 弘辽科技:扶持100个新品牌销量过亿投资人在抖音看到哪些机会?
  16. 同时查询京东多个快递物流,并分析中转延误
  17. sql注入pythonpoco_SQL注入原理与解决方法代码示例
  18. 短线上岸西安电子科技大学考研811信号与电路分析经验分享
  19. python之bt种子,dht网络共享热门资源
  20. 浙江工业大学计算机应用基础,本科教学-浙江工业大学计算机科学与技术.doc

热门文章

  1. html卡片ui,炫酷网站带缩略图的文章卡片UI界面设计
  2. c语言程序设计电子书答案,C语言程序设计课后习题详细答案.doc
  3. Codeforces 1139E(二分图最大匹配)
  4. crown ether-PEG-Vitamin D 冠醚-聚乙二醇-维生素D 冠醚-PEG-VD
  5. 红帽认证常见答疑(一):有效期、考试题型、考试对年龄和身份要求、英语水平等
  6. 跨境电商背景下,DolphinScheduler 在 SHEIN 的二开实践
  7. 最新:2022年中国科技核心期刊目录公布(附完整版目录)
  8. 【 RA4M2开发板环境搭建之串口下载1】
  9. C++课程设计:图书管理系统【附源码】
  10. Oracle12C安装记录