0

質問はむしろ学術的な性質のものです...
私は次のアーキテクチャを持っています: Jboss AS ワーカーの前にある Apache サーバーは、mod_jk を使用して互いに通信します。JSESSIONID の生成にはどのアルゴリズムが使用されていますか、または何に基づいていますか? ある種のハッシュアルゴリズム(おそらくmd5)の出力に似ているようですか?

4

1 に答える 1

1

Tomcat の sessionId を生成するために使用されるコード スニペットを次に示します。Tomcat 5.5.35 ソースコードから引っ張ってきました。ソースコードはここにありますsessionId は、ここにある ManagerBase クラスによって生成されるようです。便宜上、ManagerBase のコード スニペットをここに追加します。

お役に立てれば。

幸運を!

/**
 * Generate and return a new session identifier.
 */
protected synchronized String generateSessionId() {

    byte random[] = new byte[16];
    String jvmRoute = getJvmRoute();
    String result = null;

    // Render the result as a String of hexadecimal digits
    StringBuffer buffer = new StringBuffer();
    do {
        int resultLenBytes = 0;
        if (result != null) {
            buffer = new StringBuffer();
            duplicates++;
        }

        while (resultLenBytes < this.sessionIdLength) {
            getRandomBytes(random);
            random = getDigest().digest(random);
            for (int j = 0;
            j < random.length && resultLenBytes < this.sessionIdLength;
            j++) {
                byte b1 = (byte) ((random[j] & 0xf0) >> 4);
                byte b2 = (byte) (random[j] & 0x0f);
                if (b1 < 10)
                    buffer.append((char) ('0' + b1));
                else
                    buffer.append((char) ('A' + (b1 - 10)));
                if (b2 < 10)
                    buffer.append((char) ('0' + b2));
                else
                    buffer.append((char) ('A' + (b2 - 10)));
                resultLenBytes++;
            }
        }
        if (jvmRoute != null) {
            buffer.append('.').append(jvmRoute);
        }
        result = buffer.toString();
    } while (sessions.containsKey(result));
    return (result);

}
于 2012-03-21T00:37:19.283 に答える