????????????,??????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");

回复