昨日は史郎-Redisの時間を統合し、セッションIDの使用は、他のマイクロサービスエラーでユーザーのセッションが発生します:上記のid上記の[XXX]とNOのセッションがあります。
基本的にはとき言って、すべてのデータを検索cookieIdは残念ながら唯一のソースコード、デバッグトレースダウンし、私の問題や明白な矛盾を引き起こしました。エラーコードが発見されたのでRedisSessionDAO.doReadSessionのメソッドキャッチ例外は、原因投げていない、直接バックの戻り値のセッションにnullの場合、コードは次のとおりです。
@Overrideは、 保護されたセッションdoReadSession(シリアライズセッションID){ 場合(セッションID == NULL ){ logger.warn( "セッションIDがnullを" )。 リターン ヌル。 } であれば(この.sessionInMemoryEnabled){ セッションセッション = getSessionFromThreadLocal(セッションID)。 もし(!セッション= nullの){ リターンセッション。 } } セッションセッション = NULL ; logger.debug(「Redisのからのセッションを読みます」); 試す{ セッション = (セッション)valueSerializer.deserialize(redisManager.get(keySerializer.serialize(getRedisSessionKey(セッションID))))。 もし(この.sessionInMemoryEnabled){ setSessionToThreadLocal(セッションID、セッション)。 } } キャッチ(SerializationException電子){ logger.error( "リードセッションエラーsettionId =" + セッションID)。 } 戻りセッション。 }
このコード:セッション=(セッション)valueSerializer.deserialize(redisManager.get(keySerializer.serialize(getRedisSessionKey(セッションID))));私は、メソッドを使用するには、表示されたIDとはセッションはありません理由は。私はAUTHUSERをパッケージ化するので、逆シリアル化の例外で、その結果、他のマイクロサービスで参照されていません。
そして、RedisSeesionDAOここでは、キャッチなかっ後、もはやそのことを、スローするように続けAbstractSessionDAO.readSeesionメソッド呼び出しRedisSessionDAOオーバーライドさdoReadSession後で得ヌルのセッションは、取得するには思わなかったセッションを、それから投げるとのセッションがありませんIDのエラー。
readSeesionコード:
パブリックセッションreadSession(シリアライズセッションID)がスローUnknownSessionException { セッションS = doReadSession(セッションID)を、 もし(S == NULL ){ スロー 新しい( "IDとセッションがありません[" +セッションID + "]" UnknownSessionExceptionを;) } 戻りS。 }
だから、全体的に、私はあまりにも長い間、調査のためにこれを行う、犯人はRedisSeesionDAOの例外をエラー処理、上側の方法は無関係な実際のエラーと例外がスローされます内側に何が起こったのかわからないユーバー誤差法は、聞かせて私は、大きな円を選びました。
共通コンポーネントキャッチ異常は慎重にああする必要があります - それ以外の場合は何度も何度も悲劇が起こります。