2012-03-20 13 views
0

質問は学問的性質よりむしろ...
私は次のアーキテクチャを持っています.Joboss ASの前にApacheサーバがあり、mod_jkを使用してお互いに会話します。 JSESSIONIDの生成にはどのようなアルゴリズムが使用されていますか、それに基づいていますか?何らかのハッシュアルゴリズム(おそらくmd5)の出力と似ているようですね。Apache mod_jkセッションIDの作成アルゴリズム

答えて

1

TomcatのsessionIdを生成するためのコードスニペットです。私はTomcat 5.5.35のソースコードからそれを取り出しました。ソースコードhereがあります。 sessionIdは、hereにある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); 

} 
+0

https://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/session/ManagerBase.html – mplungjan

関連する問題