Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/log/
/target/
/.idea/
9 changes: 9 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM amazoncorretto:11-alpine

COPY target/rdpview-0.0.1-SNAPSHOT.jar app.jar

ENV GUACD_HOST "127.0.0.1"
ENV GUACD_PORT "4822"

EXPOSE 8082
CMD ["java", "-jar", "./app.jar", "--spring.profiles.active=prod","--guacd.host=${GUACD_HOST}","--guacd.port=${GUACD_PORT}"]
835 changes: 0 additions & 835 deletions log/spring.log

This file was deleted.

Binary file removed log/spring.log.2019-03-19.0.gz
Binary file not shown.
Binary file removed log/spring.log.2019-03-21.0.gz
Binary file not shown.
21 changes: 0 additions & 21 deletions src/main/java/com/education/config/GuacamoleConfig.java

This file was deleted.

13 changes: 8 additions & 5 deletions src/main/java/com/education/config/MyServletConfig.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.education.config;

import com.education.servlet.Myservlet;
import com.education.servlet.RdpServlet;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -12,11 +13,13 @@
*/
@Configuration
public class MyServletConfig {

@Bean
//注册servlet组件
public ServletRegistrationBean myServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new Myservlet(),
"/rdpview/*");
return servletRegistrationBean;
public ServletRegistrationBean<RdpServlet> rdpServlet(
@Value("${guacd.host}") String host,
@Value("${guacd.port}") Integer port
) {
return new ServletRegistrationBean<>(new RdpServlet(host, port), "/rdpview/*");
}
}
23 changes: 0 additions & 23 deletions src/main/java/com/education/config/RdpViewConfig.java

This file was deleted.

19 changes: 5 additions & 14 deletions src/main/java/com/education/controller/IndexController.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,27 @@
package com.education.controller;

import com.education.config.GuacamoleConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;


/**
* @author: ruoniao@gmail.com
* @date 2019/3/16 21:49
* Explain:
*/
@Controller
@Slf4j
public class IndexController {
@RequestMapping(value = "/connect")
@RequestMapping(value = "/rdp")
public String index(@RequestParam(name = "username") String username,
@RequestParam(name = "password") String password,
@RequestParam(name = "ip") String ip,
@RequestParam(name = "port") String port,
@RequestParam(name = "width") String width,
@RequestParam(name = "heigh") String heigh,
Map<String,Object> map) {
@RequestParam(name = "height") String height,
Map<String, Object> map) {
String base_url = String.format("/rdpview/%s&%s&%s&%s&%s&%s",
ip,port,username,password,width,heigh);
map.put("base_url",base_url);
ip, port, username, password, width, height);
map.put("base_url", base_url);
return "guacamole";
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.education.servlet;

import com.education.config.GuacamoleConfig;
import com.education.config.RdpViewConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.net.GuacamoleSocket;
Expand All @@ -11,11 +9,9 @@
import org.apache.guacamole.protocol.ConfiguredGuacamoleSocket;
import org.apache.guacamole.protocol.GuacamoleConfiguration;
import org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Bean;

import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.soap.Addressing;
import java.util.Arrays;
import java.util.List;

Expand All @@ -25,14 +21,20 @@
* Explain:
*/
@Slf4j
public class Myservlet extends GuacamoleHTTPTunnelServlet {
public class RdpServlet extends GuacamoleHTTPTunnelServlet {

@Autowired
private GuacamoleConfig guacamoleConfig;
private final String host;
private final int port;

public RdpServlet(String host, int port) {
this.host = host;
this.port = port;
}


@Bean
@Override
protected GuacamoleTunnel doConnect(HttpServletRequest request)
throws GuacamoleException {
protected GuacamoleTunnel doConnect(HttpServletRequest request) {
try {
List<String> info = Arrays.asList(request.getRequestURI().split("/rdpview/")[1].split("&"));
// Create our configuration
Expand All @@ -42,26 +44,21 @@ protected GuacamoleTunnel doConnect(HttpServletRequest request)
config.setParameter("port", info.get(1));
config.setParameter("username", info.get(2));
config.setParameter("password", info.get(3));
config.setParameter("width",info.get(4));
config.setParameter("height",info.get(5));
config.setParameter("width", info.get(4));
config.setParameter("height", info.get(5));
// 在windows 机器下,默认的安全远程连接方式:仅允许运行使用网路级别身份验证的远程桌面的计算机连接(更安全) 若不将认证模式改为NLA
//网络级验证(network level authentication NLA)是提供给远程桌面连接的一种新安全验证机制,可以在终端桌面连接及登录画面出现前预先完成用户验证程序,由于提前验证部分仅需要使用到较少的网络资源,因此可以有效防范黑客与恶意程序的攻击,同时降低阻断服务攻击(Dos)的机会。

config.setParameter("security","nla");
// 忽略证书验证,否则guaced 会报错
config.setParameter("ignore-cert","true");

// Connect to guacd - everything is hard-coded here.
GuacamoleSocket socket = new ConfiguredGuacamoleSocket(
// Todo 学习Servlet 整合springboot 将配置放在yml中,之前一直未成功
new InetGuacamoleSocket("127.0.0.1", 4822),
config
);
config.setParameter("security", "nla");
// 忽略证书验证,否则guacd 会报错
config.setParameter("ignore-cert", "true");
System.out.println("RdpServlet.doConnect #" + host + ":" + port);
GuacamoleSocket socket = new ConfiguredGuacamoleSocket(new InetGuacamoleSocket(host, port), config);

// Return a new tunnel which uses the connected socket
return new SimpleGuacamoleTunnel(socket);
} catch (GuacamoleException e){
log.error("启动rdp错误,无法启动GuacamoleTunnel",e.getMessage());
} catch (GuacamoleException e) {
log.error("启动rdp错误,无法启动GuacamoleTunnel", e.getMessage());
//暂时不处理
return null;
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ logging:
pattern:
console: "%d - %msg%n"
file: "log/spring.log"
guacamole:
ip: "127.0.0.1"
guacd:
host: "127.0.0.1"
port: 4822
6 changes: 3 additions & 3 deletions src/main/resources/application-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ logging:
pattern:
console: "%d - %msg%n"
file: "log/spring.log"
guacamole:
ip: "127.0.0.1"
port: 4822
guacd:
host: "127.0.0.1"
port: 4822
2 changes: 0 additions & 2 deletions src/main/resources/application.properties

This file was deleted.

37 changes: 15 additions & 22 deletions src/main/resources/templates/guacamole.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
<title>360考试认证平台</title>
<title>快贸-远程桌面</title>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
</head>

Expand All @@ -16,36 +16,32 @@

<!-- Init -->
<script th:inline="javascript"> /* <![CDATA[ */
var http_tunnel = [[${base_url}]];
const http_tunnel = [[${base_url}]];
// Get display div from document
var display = document.getElementById("display");
const display = document.getElementById("display");
// Instantiate client, using an HTTP tunnel for communications.

var guac = new Guacamole.Client(
new Guacamole.HTTPTunnel(http_tunnel)
);
const gugClient = new Guacamole.Client(new Guacamole.HTTPTunnel(http_tunnel));

// Add client to display div
display.appendChild(guac.getDisplay().getElement());
display.appendChild(gugClient.getDisplay().getElement());

// Error handler
guac.onerror = function (error) {
gugClient.onerror = function (error) {
if (error.code === 519) {
alert("连接失败,请联系管理员");
}
else if (error.code === 521)
} else if (error.code === 521)
alert("此主机已从其他终端登录");
else
alert("连接失败,请联系管理员");

};

// Connect
guac.connect();
gugClient.connect();

// Disconnect on close
window.onunload = function () {
guac.disconnect();
gugClient.disconnect();
}

/* ]]> */ </script>
Expand All @@ -54,36 +50,33 @@
<script type="text/javascript"> /* <![CDATA[ */

// Mouse
var mouse = new Guacamole.Mouse(guac.getDisplay().getElement());
const mouse = new Guacamole.Mouse(gugClient.getDisplay().getElement());

mouse.onmousedown =
mouse.onmouseup =
mouse.onmousemove = function (mouseState) {
guac.sendMouseState(mouseState);
gugClient.sendMouseState(mouseState);
};


// Keyboard
var keyboard = new Guacamole.Keyboard(document);
const keyboard = new Guacamole.Keyboard(document);

keyboard.onkeydown = function (keysym) {
guac.sendKeyEvent(1, keysym);
gugClient.sendKeyEvent(1, keysym);
};

keyboard.onkeyup = function (keysym) {
guac.sendKeyEvent(0, keysym);
gugClient.sendKeyEvent(0, keysym);
};

/* ]]> */ </script>

<script type="text/javascript">
//提取到函数外面作为全局变量
var rm = document.getElementById("display");

const rm = document.getElementById("display");
//自定义一个浏览器右键菜单,单击右键是显示它
//oncontextmenu上下文菜单事件,右键菜单
rm.oncontextmenu = function (e) {

//阻止默认的右键菜单显示
return false;
};
Expand Down