Oneと同じアカウントのアプリケーションウェブは、組立ラインをオフに絞ると、リアログの前にログインします

  あなたがセッション制御を持っていない場合は、アカウント内の符号は、Bはまた、Bは、情報の変更が表示されます、アカウントが同じアカウントで改訂された情報を記録し、この場合、Webアプリケーションに表示されるので、ユーザー体験がします悪い、Bは、情報が変更されますなぜ私は、ああ変更されていないと感じます。そして、セッション制御、まずログインを行った後、その後、その後、Bは、組立ラインオフスクイズログインし、Bをログに記録します。

  アイデアの実現:タイムスタンプ比較

  1まず、背景は、ブロッキングを行うために必要とされていない、でユーザーログが、フロントデスクのユーザー名とパスワードを背景に合格し、背景が前面にJWT形式のトークンを生成し、キー、ユーザー情報などのトークンとのRedisに値を保存します

  2その他のURLパスは、フィルタは、フロントデスクに直接エラーメッセージを返します彼らは、フロントデスクのトークンを運ぶかどうかを判断する、またはトークンを運ぶために、要求をインターセプトしますが、(見つけるにRedisの)無効になっている、この時間は、ユーザ名となりますだけでなく、キー名へのユーザーのためのキー、トークンからのRedisのクエリ、Redisのにトークンとして値。要求を解放し、もしトークンRedisのクエリとフロントデスクから渡す、解放要求を同じトークンを来て、トークンのRedisからの問合せの場合フロントデスクから来る渡すことは同じトークンでないと、あなたはタイムスタンプのフロントデスクからトークンを渡した場合のRedisよりも大きい、Redisのは、トークンがキャンセルトークンを拒否されたカバー、他のデバイスでは、すでに自分のログインアカウントに戻って、リクエストをインターセプト。

パブリック クラスCompareKickOutFilterはKickOutFilter {延び
    @Override 
    パブリック(HttpServletRequestのリクエスト、HttpServletResponseの応答){isAccessAllowedのブール
        文字列トークン = request.getHeader(" 認可" )。
        文字列名 = JWTUtil.getUsername(トークン)。
        文字列USERKEY = PREFIX + ユーザ名。
        RBucketの<string>バケット= redissonClient.getBucket(USERKEY)。
        文字列redisToken =バケット。取得(); 

        もし(StringUtils.isBlank(redisToken)){ // 第一次设置
            。バケットSET (トークン); 
        } そう IF(token.equals(redisToken)){ // 同じトークン
            リターン trueに; 
        } { 
            ロングredisTokenUnixTime = JWTUtil.getClaim(redisToken、" CREATETIME " ).asLong(); 
            ロングtokenUnixTime JWTUtil.getClaim =(トークン、" CREATETIME " ).asLong();
             IF(tokenUnixTime.compareTo(redisTokenUnixTime)> 0 ){
                 // 渡されたが、今から最新のトークンである、古いトークンを上書き
                バケット。SET (トークン); 
            } {
                 // 現在のトークンログオフ
                userService.logout(トークン); 
                sendJsonResponse(レスポンス、4001" あなたのアカウントは、他の機器に登録されている" );
                 を返す ; 
            } 
        } 
        戻り値 をtrueにし; 
    } 
}

 

プロジェクト構造:

 

プロジェクト住所:https://github.com/jake1263/loginCtl

 

おすすめ

転載: www.cnblogs.com/moris5013/p/11128135.html