亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringSecurityOAuth2中登錄增加驗證碼功能是什么

發布時間:2021-10-20 17:41:32 來源:億速云 閱讀:282 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關SpringSecurityOAuth2中登錄增加驗證碼功能是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在封裝了一層RestTemplate 請求的基礎上。請求code,使用redis保存帶用戶名的限時緩存 例如保存60秒緩存 在登錄請求驗證用戶名密碼之前先進過code驗證。

登錄設置驗證碼,驗證碼有效期為1分鐘,登錄成功后或者到達最大時間后驗證碼即失效。驗證碼以用戶名_code 的關鍵字保存在redis中,并設置失效時間,用戶名+驗證碼匹配通過后才進行下一步的token生成,生成token后,即刪除驗證碼。

改造(5)中的tokenController代碼(本文只展示實現思路,code直接生成隨機數了)

 @PostMapping("/login")
    public ResponseVo login(HttpServletRequest request) throws UnsupportedEncodingException {
        String header = request.getHeader("Authorization");
        if (header == null && !header.startsWith("Basic")) {
            return new ResponseVo(400, "請求頭中缺少參數");
        }
        String code = request.getParameter("code");
        String username = request.getParameter("username");

        if(code==null){
            return new ResponseVo(500,"驗證碼缺失");
        }
        String old_code =redisTemplate.opsForValue().get(username+"_code");

        if(old_code==null){
            return new ResponseVo(500,"驗證碼不存在或者已經過期");
        }
        if(!code.equals(old_code)){
            return new ResponseVo(500,"驗證碼錯誤");
        }


        String url = "http://" + request.getRemoteAddr() + ":" + request.getServerPort() + "/oauth/token";

        Map<String, Object> map = new HashMap<>();
        map.put("grant_type", "password");
        map.put("username", username);
        map.put("password", request.getParameter("password"));

        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", header);
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);  // 必須該模式,不然請求端無法取到 grant_type

        HttpEntity httpEntity = new HttpEntity<>(headers);

        ResponseEntity<String> response = restTemplate.postForEntity(url + "?" + LinkStringUtil.createLinkStringByGet(map), httpEntity, String.class);

        if (response.getStatusCodeValue() == 200) {
            return new ResponseVo(200, "登錄成功", JSONObject.parseObject(response.getBody()));
        } else {
            return new ResponseVo(500, "登錄失敗");
        }
    }

    @PostMapping("/getCode")
    public String getCode(String username) {
        String code = String.valueOf(Math.random() * 100);
        redisTemplate.opsForValue().set(username + "_code", code, 60, TimeUnit.SECONDS);
        return "code is " + code;
    }

驗證通過:

SpringSecurityOAuth2中登錄增加驗證碼功能是什么

驗證碼失效或者錯誤:

SpringSecurityOAuth2中登錄增加驗證碼功能是什么

上述就是小編為大家分享的SpringSecurityOAuth2中登錄增加驗證碼功能是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无为县| 罗江县| 师宗县| 呼伦贝尔市| 崇明县| 天等县| 民县| 永清县| 山西省| 荔波县| 兴安盟| 苏尼特右旗| 定结县| 和林格尔县| 丽江市| 清苑县| 葫芦岛市| 永善县| 乐至县| 中西区| 湖州市| 磐安县| 嘉兴市| 通化县| 杭锦后旗| 德昌县| 资兴市| 宁国市| 巴林左旗| 吐鲁番市| 康乐县| 英山县| 饶阳县| 宁明县| 繁峙县| 洱源县| 永和县| 洪湖市| 景泰县| 墨玉县| 平泉县|