Алгоритм создания идентификатора сессии Apache mod_jk - PullRequest
0 голосов
/ 21 марта 2012

Вопрос носит скорее академический характер ...
У меня есть следующая архитектура: сервер Apache перед работниками Jboss AS, использующими mod_jk для общения друг с другом.Какой алгоритм используется для генерации JSESSIONID или на чем он основан?Это похоже на вывод какого-то хэш-алгоритма (возможно, md5)?

1 Ответ

1 голос
/ 21 марта 2012

Вот фрагмент кода, используемый для генерации sessionId для tomcat.Я вытащил его из 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);

}
...