????????????,??????url(??
https://192-168-2-171.realhostip.com/ajax?token=45K5Eq2anYubuzbEKbUro1uDTOerLD-fyAnsSqu4Trm6bjw3d6iMRzwkUH7vwPn68nZ4mbKA0CcDKWeIoSXdZn8729dfhSoRO85_2SUEKPFwX8bzwilhNndxF976ZkE7NTYiWPweGKlK35yWzD_jni6Mm7rYOIm5VD2pabhr4tABSWWCWUMwXTfgSOM7Tg3FoaQehhPU7LGFs80CnbLK_kGFVEWpX1yWNrPTJbhi5kMz3AejhUqY6oYauk2gkYtoIqaUL9j1TpE#),token???????????????????
????????:????token??????????:
ConsoleProxyClientBase??:
ConsoleProxyPasswordBasedEncryptor encryptor = new
ConsoleProxyPasswordBasedEncryptor(ConsoleProxy.getEncryptorPassword());
this.clientToken =
encryptor.encryptObject(ConsoleProxyClientParam.class, clientParam);
ConsoleProxyPasswordBasedEncryptor??????????????????????????????:
public ConsoleProxyPasswordBasedEncryptor(String password)
{//??:????????????????????????KeyIVPair??????json??????,liangliang,meng
gson = new GsonBuilder().create();
keyIvPair = gson.fromJson(password, KeyIVPair.class);
}
????String??????????????json????????????,??????????????????:keyIvPair.
??????????????:ConsoleProxy.getEncryptorPassword(),????????:
static String encryptorPassword = genDefaultEncryptorPassword();
private static String genDefaultEncryptorPassword() {
try {
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] randomBytes = new byte[16];
random.nextBytes(randomBytes);
return Base64.encodeBase64String(randomBytes);
} catch (NoSuchAlgorithmException e) {
s_logger.error("Unexpected exception ", e);
assert(false);
}
return "Dummy";
}
??????????????????base64????????????????,????????json????????????.??????????????????????????keyIvPair.??????cloudstack??????????????????????????????token?????
??????????????:??ConsoleProxyClientBase????????????????????,????:
public ConsoleProxyPasswordBasedEncryptor(KeyIVPair keyIvPair){
this.keyIvPair = keyIvPair;
}
????????????KeyIVPair????
SecureRandom random;
random = SecureRandom.getInstance("SHA1PRNG");
byte[] keyBytes = new byte[16];
random.nextBytes(keyBytes);
byte[] ivBytes = new byte[16];
random.nextBytes(ivBytes);
KeyIVPair keyIvPair = new KeyIVPair();
keyIvPair.setKeyBytes(keyBytes);
keyIvPair.setIvBytes(ivBytes);
????????ConsoleProxyPasswordBasedEncryptor????.
ConsoleProxyPasswordBasedEncryptor encryptor3 = new
ConsoleProxyPasswordBasedEncryptor(keyIvPair);
????????ConsoleProxyClientParam????,ConsoleProxyClientParam cpcp = new
ConsoleProxyClientParam();
cpcp.setAjaxSessionId("");//192.168.2.175|xK8unwqdz
cpcp.setClientHostAddress(ip);//*
cpcp.setClientHostPassword("xK8unwqdz");
//cpcp.setClientHostPort(8080);//*
//cpcp.setClientTag("cmdline");
//????clientTag??????,???????????????????
// cpcp.setClientTunnelSession("");
//ClientTunnelSession??????,?????????
// cpcp.setClientTunnelUrl("clientTuneelUrl");
//ClientTunnelUrl,?????????
// cpcp.setTicket("ticket"); //??????ticket??????????
//??cpcp??????????json??????.
String json = gson.toJson(cpcp);
//????token
String token = encryptor3.encryptText(json);
??????????????token????????????,??????????????????????,???????????????????????????????????????????????????:
private void doHandle(HttpExchange t) throws Exception,
IllegalArgumentException {
String queries = t.getRequestURI().getQuery();
if(s_logger.isTraceEnabled())
s_logger.trace("Handle AJAX request: " + queries);
Map<String, String> queryMap =
ConsoleProxyHttpHandlerHelper.getQueryMap(queries);
String host = queryMap.get("host");//liangliang
String portStr = queryMap.get("port");
String sid = queryMap.get("sid");
String tag = queryMap.get("tag");
String ticket = queryMap.get("ticket");
String ajaxSessionIdStr = queryMap.get("sess");
String eventStr = queryMap.get("event");
String console_url = queryMap.get("consoleurl");
String console_host_session = queryMap.get("sessionref");