Redisはメール検証コードを実現する

2713 ワード

現在、appログインには認証コードログイン機能があり、少なくとも2つのインタフェースが含まれています.認証コードの取得とログインです. 
バックグラウンドサービスは、検証コード、アカウントとその検証コードの対応関係をキャッシュし、時間オーバー(一般的に60秒)を設定する必要がある.この検証コードは、記憶するためにミドルウェアが必要です.RedisはKeyValue方式でデータを格納し、タイムアウト自動削除機能も提供し、メール認証コードのニーズに適しています.
参考:Redis実装ミドルウェア
一、「認証コードの取得」ボタンのサンプルコードをクリックする:
  @RequestMapping("/getloginsms")
    @ResponseBody
    public DemoEntity getSmsCode(@RequestParam(value = "accountid") String accountid) {
        Jedis jedis = RedisProvider.getJedis();
        DemoEntity entity = new DemoEntity();
        String pwd = null;

        //1.             
        boolean isExist = jedis.exists(accountid + "_smslogin");
        if (isExist) {
            pwd = jedis.get(accountid + "_smslogin");   // redis     

            //         
            return  entity;
        } else {
            //          ,      
            pwd = TestRedis.getRandom();

            jedis.setex(accountid + "_smslogin", 60, pwd);   //            
        }


        //       
        entity.setPwd(pwd);

        return entity;
    }
各アカウントは一意のkeyに対応し、redisのkey値を区別するために接頭辞または接尾辞を追加するには、この例では接尾辞_を追加するsmslogin.
キーコード:jedis.setex(accountid+"_smslogin",60,pwd)は、60秒を超えると自動的にキー値が削除されることを示す.
6ビットの乱数を返す検証コード関数を生成します. 
    public static String getRandom() {
        String num = "";
        for (int i = 0 ; i < 6 ; i ++) {
            num = num + String.valueOf((int) Math.floor(Math.random() * 9 + 1));
        }
        return num;
    }

二、ログインインタフェースの例:
  @RequestMapping("/loginsms")
    @ResponseBody
    public DemoEntity logingBySms(@RequestParam(value = "accountid") String accountid,
                                    @RequestParam(value = "smscode") String code) {
        Jedis jedis = RedisProvider.getJedis();
        String pwd = null;
        //1.             
        boolean isExist = jedis.exists(accountid + "_smslogin");
        if (isExist) {
            pwd = jedis.get(accountid + "_smslogin");   // redis     
        } else {
            //          ,          

        }

        //2.             code     ,             pwd  。
        .....


        //3.   OK      
        jedis.del(accountid + "_smslogin");

        DemoEntity resp = new DemoEntity();
        //       

        return resp;
    }

ログインインタフェースは、アクセス検証コードパラメータとミドルウェアredisにキャッシュされた検証コードを比較し、一般的にappはパスワードフィールドを転送する際に暗号化されます.したがって、サービス側は、パスワードの明文を復号または暗号化することができる.
Redisはタイムアウト自動キー値削除機能を提供し、複数のtomcatノードで同じredisにアクセスできるため、Redisで検証コード機能を実現する.
PS:Redisは分散ロック機能も提供しており、現在インターネット会社が使用している主流のミドルウェアです.