這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)SpringSecurityOAuth2中登錄增加驗證碼功能是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司服務緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過十載的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務人員,并且完全形成了一套成熟的業(yè)務流程,能夠完全依照客戶要求對網(wǎng)站進行成都網(wǎng)站建設、網(wǎng)站設計、建設、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
在封裝了一層RestTemplate 請求的基礎上。請求code,使用redis保存帶用戶名的限時緩存 例如保存60秒緩存 在登錄請求驗證用戶名密碼之前先進過code驗證。
登錄設置驗證碼,驗證碼有效期為1分鐘,登錄成功后或者到達最大時間后驗證碼即失效。驗證碼以用戶名_code 的關(guān)鍵字保存在redis中,并設置失效時間,用戶名+驗證碼匹配通過后才進行下一步的token生成,生成token后,即刪除驗證碼。
改造(5)中的tokenController代碼(本文只展示實現(xiàn)思路,code直接生成隨機數(shù)了)
@PostMapping("/login") public ResponseVo login(HttpServletRequest request) throws UnsupportedEncodingException { String header = request.getHeader("Authorization"); if (header == null && !header.startsWith("Basic")) { return new ResponseVo(400, "請求頭中缺少參數(shù)"); } 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,"驗證碼不存在或者已經(jīng)過期"); } if(!code.equals(old_code)){ return new ResponseVo(500,"驗證碼錯誤"); } String url = "http://" + request.getRemoteAddr() + ":" + request.getServerPort() + "/oauth/token"; Mapmap = 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 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中登錄增加驗證碼功能是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。