⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 negociationhandler.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				 BaseRequest req )	throws IOException    {        System.out.println("handleAjpMessage: " + type );	Ajp13Packet outBuf=ch.outBuf;	// Valid requests when not logged:	switch( type ) {	case JK_AJP14_LOGINIT_CMD :	    return handleLogInit(ch, hBuf, outBuf);	case JK_AJP14_LOGCOMP_CMD :	    return handleLogComp(ch, hBuf, outBuf);	case JK_AJP13_SHUTDOWN:	    return -2;	case JK_AJP14_CONTEXT_QRY_CMD :	    return handleContextQuery(ch, hBuf, outBuf);	case JK_AJP14_STATUS_CMD :	    return handleStatus(hBuf, outBuf);	case JK_AJP14_SHUTDOWN_CMD :	    return handleShutdown(hBuf, outBuf);	case JK_AJP14_CONTEXT_STATE_CMD :	    return handleContextState(hBuf, outBuf);	case JK_AJP14_UNKNOW_PACKET_CMD :	    return handleUnknowPacket(hBuf, outBuf);	default:	    log("unknown command " + type + " received");	    return 200; // XXX This is actually an error condition	}	//return UNKNOWN;    }        //----------- Implementation for various protocol commands -----------    /**     * Handle the Initial Login Message from Web-Server     *     * Get the requested Negociation Flags     * Get also the Web-Server Name     *      * Send Login Seed (MD5 of seed)     */    private int handleLogInit( Ajp13 ch, Ajp13Packet msg,			       Ajp13Packet outBuf )	throws IOException    {	webserverNegociation = msg.getLongInt();	String webserverName  = msg.getString();	log("in handleLogInit with nego " +	    decodeNegociation(webserverNegociation) +            " from webserver " + webserverName);		outBuf.reset();        outBuf.appendByte(JK_AJP14_LOGSEED_CMD);	String[] credentials = new String[1];	credentials[0] = getSeed();        outBuf.appendXBytes(getSeed().getBytes(), 0, AJP14_ENTROPY_SEED_LEN);	log("in handleLogInit: sent entropy " + getSeed());        outBuf.end();        ch.send(outBuf);	return 304;    }        /**     * Handle the Second Phase of Login (accreditation)     *      * Get the MD5 digest of entropy + secret password     * If the authentification is valid send back LogOk     * If the authentification failed send back LogNok     */    private int handleLogComp( Ajp13 ch, Ajp13Packet msg,			       Ajp13Packet outBuf )	throws IOException    {	// log("in handleLogComp :");		byte [] rdigest = new byte[AJP14_ENTROPY_SEED_LEN];		if (msg.getXBytes(rdigest, AJP14_ENTROPY_SEED_LEN) < 0)	    return 200;		String[] credentials = new String[2];	credentials[0] = getSeed();	credentials[1] = getPassword();	String computed = digest(credentials, "md5");	String received = new String(rdigest);		// XXX temp workaround, to test the rest of the connector.		if ( ! computed.equalsIgnoreCase(received)) {	    log("in handleLogComp : authentification failure received=" +		received + " awaited=" + computed);	}		if (false ) { // ! computed.equalsIgnoreCase(received)) {	    log("in handleLogComp : authentification failure received=" +		received + " awaited=" + computed);	    	    // we should have here a security mecanism which could maintain	    // a list of remote IP which failed too many times	    // so we could reject them quickly at next connect	    outBuf.reset();	    outBuf.appendByte(JK_AJP14_LOGNOK_CMD);	    outBuf.appendLongInt(AJP14_BAD_KEY_ERR);	    outBuf.end();	    ch.send(outBuf);	    return 200;	} else {            // logged we can go process requests	    channel.setLogged(true);	    outBuf.reset();	    outBuf.appendByte(JK_AJP14_LOGOK_CMD);	    outBuf.appendLongInt(getProtocolFlags(webserverNegociation));	    outBuf.appendString( containerSignature );	    outBuf.end(); 	    ch.send(outBuf);	}		return (304);    }    private int handleContextQuery( Ajp13 ch, Ajp13Packet msg,				    Ajp13Packet outBuf )	throws IOException    {	log("in handleContextQuery :");    String virtualHost = msg.getString();    log("in handleContextQuery for virtual" + virtualHost);     outBuf.reset();    outBuf.appendByte(JK_AJP14_CONTEXT_INFO_CMD);    outBuf.appendString( virtualHost );    log("in handleContextQuery for virtual " + virtualHost +        "examples URI/MIMES");    outBuf.appendString("examples");    // first context - examples    outBuf.appendString("servlet/*");   // examples/servlet/*    outBuf.appendString("*.jsp");       // examples/*.jsp    outBuf.appendString("");            // no more URI/MIMES    log("in handleContextQuery for virtual " + virtualHost +        "send admin URI/MIMES");     outBuf.appendString("admin");       // second context - admin    outBuf.appendString("servlet/*");   // /admin//servlet/*    outBuf.appendString("*.jsp");       // /admin/*.jsp    outBuf.appendString("");            // no more URI/MIMES    outBuf.appendString("");            // no more contexts    outBuf.end();    ch.send(outBuf);    	return (304);    }        private int handleStatus( Ajp13Packet msg, Ajp13Packet outBuf )        throws IOException    {	log("in handleStatus :");	return (304);    }    private int handleShutdown( Ajp13Packet msg, Ajp13Packet outBuf )        throws IOException    {	log("in handleShutdown :");	return (304);    }        private int handleContextState( Ajp13Packet msg , Ajp13Packet outBuf)        throws IOException    {	log("in handleContextState :");	return (304);    }        private int handleUnknowPacket( Ajp13Packet msg, Ajp13Packet outBuf )        throws IOException    {	log("in handleUnknowPacket :");	return (304);    }    // -------------------- Utils --------------------    /**     * Compute the Protocol Negociation Flags     *      * Depending the protocol fatures implemented on servet-engine,     * we'll drop requested features which could be asked by web-server     *     * Hopefully this functions could be overrided by decendants     */    private int getProtocolFlags(int wanted)    {                    // no real-time context update	wanted &= ~(AJP14_CONTEXT_UPDATE_NEG |                    // no gzip compression yet		    AJP14_GZIP_STREAM_NEG    |                      // no DES56 cyphering yet		    AJP14_DES56_STREAM_NEG   |                    // no Extended info on server SSL vars yet		    AJP14_SSL_VSERVER_NEG    |                    // no Extended info on client SSL vars yet		    AJP14_SSL_VCLIENT_NEG    |                    // no Extended info on crypto SSL vars yet		    AJP14_SSL_VCRYPTO_NEG    |                    // no Extended info on misc SSL vars yet		    AJP14_SSL_VMISC_NEG	     |                    // Reset AJP protocol mask		    AJP14_PROTO_SUPPORT_AJPXX_NEG);        	// Only strict AJP14 supported	return (wanted | AJP14_PROTO_SUPPORT_AJP14_NEG);	    }    /**     * Compute a digest (MD5 in AJP14) for an array of String     */    public final String digest(String[] credentials, String algorithm) {        try {            // Obtain a new message digest with MD5 encryption            MessageDigest md =                (MessageDigest)MessageDigest.getInstance(algorithm).clone();            // encode the credentials items	    for (int i = 0; i < credentials.length; i++) {		if( debug > 0 )                    log("Credentials : " + i + " " + credentials[i]);		if( credentials[i] != null  )		    md.update(credentials[i].getBytes());	    }            // obtain the byte array from the digest            byte[] dig = md.digest();	    return HexUtils.convert(dig);        } catch (Exception ex) {            ex.printStackTrace();            return null;        }    }    // -------------------- Debugging --------------------    // Very usefull for develoment    /**     * Display Negociation field in human form      */    private String decodeNegociation(int nego)    {	StringBuffer buf = new StringBuffer(128);		if ((nego & AJP14_CONTEXT_INFO_NEG) != 0) 	    buf.append(" CONTEXT-INFO");		if ((nego & AJP14_CONTEXT_UPDATE_NEG) != 0)	    buf.append(" CONTEXT-UPDATE");		if ((nego & AJP14_GZIP_STREAM_NEG) != 0)	    buf.append(" GZIP-STREAM");		if ((nego & AJP14_DES56_STREAM_NEG) != 0)	    buf.append(" DES56-STREAM");		if ((nego & AJP14_SSL_VSERVER_NEG) != 0)	    buf.append(" SSL-VSERVER");		if ((nego & AJP14_SSL_VCLIENT_NEG) != 0)	    buf.append(" SSL-VCLIENT");		if ((nego & AJP14_SSL_VCRYPTO_NEG) != 0)	    buf.append(" SSL-VCRYPTO");		if ((nego & AJP14_SSL_VMISC_NEG) != 0)	    buf.append(" SSL-VMISC");		if ((nego & AJP14_PROTO_SUPPORT_AJP14_NEG) != 0)	    buf.append(" AJP14");		if ((nego & AJP14_PROTO_SUPPORT_AJP15_NEG) != 0)	    buf.append(" AJP15");		if ((nego & AJP14_PROTO_SUPPORT_AJP16_NEG) != 0)	    buf.append(" AJP16");		return (buf.toString());    }        private static int debug=10;    void log(String s) {	System.out.println("Ajp14Negotiation: " + s );    } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -