中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

可以做設(shè)計(jì)兼職的網(wǎng)站有哪些工作室搜外seo

可以做設(shè)計(jì)兼職的網(wǎng)站有哪些工作室,搜外seo,做一個(gè)小程序商城需要多少錢(qián),mac下載字體wordpress前言 我們注意到我們登錄網(wǎng)站的時(shí)候經(jīng)常會(huì)用到網(wǎng)絡(luò)驗(yàn)證碼,今天我們就簡(jiǎn)單實(shí)現(xiàn)一個(gè)驗(yàn)證碼的前后端交互問(wèn)題,做一個(gè)小demo 準(zhǔn)備 我們這里并不需要依靠原生的java來(lái)實(shí)現(xiàn),而是只需要引入一個(gè)maven依賴(lài),使用現(xiàn)成的封裝好的即可,這是我使用的是hutool工具包 網(wǎng)址:Hutool🍬…

前言

我們注意到我們登錄網(wǎng)站的時(shí)候經(jīng)常會(huì)用到網(wǎng)絡(luò)驗(yàn)證碼,今天我們就簡(jiǎn)單實(shí)現(xiàn)一個(gè)驗(yàn)證碼的前后端交互問(wèn)題,做一個(gè)小demo

準(zhǔn)備

我們這里并不需要依靠原生的java來(lái)實(shí)現(xiàn),而是只需要引入一個(gè)maven依賴(lài),使用現(xiàn)成的封裝好的即可,這是我使用的是hutool工具包

網(wǎng)址:Hutool🍬一個(gè)功能豐富且易用的Java工具庫(kù),涵蓋了字符串、數(shù)字、集合、編碼、日期、文件、IO、加密、數(shù)據(jù)庫(kù)JDBC、JSON、HTTP客戶端等功能。

參考文檔:入門(mén)和安裝 (hutool.cn)

注意:這里我們?nèi)aven倉(cāng)庫(kù)去尋找的時(shí)候,一定不要去找最新版本的

我們可以先去使用一下這里的驗(yàn)證碼,先會(huì)用,不必先理解原理

當(dāng)我么執(zhí)行完這類(lèi)代碼就會(huì)發(fā)現(xiàn),對(duì)應(yīng)的文件夾出現(xiàn)了類(lèi)似于這樣的圖片

后端

首先我們得先設(shè)計(jì)接口

我們這里第一個(gè)接口負(fù)責(zé)以流的方式寫(xiě)入數(shù)據(jù)給web客戶端

第二個(gè)接口負(fù)責(zé)檢查輸入的驗(yàn)證碼與實(shí)際的驗(yàn)證碼是否一致

至于頁(yè)面的跳轉(zhuǎn),我們交給前端即可

現(xiàn)在開(kāi)始寫(xiě)接口

我們將需要設(shè)置的常量放在配置文件中,使用一個(gè)對(duì)象進(jìn)行注入即可

  spring:application:name: Captcha//驗(yàn)證碼的長(zhǎng)寬captcha:width: 200height: 100//驗(yàn)證碼設(shè)置的時(shí)間(為了設(shè)置過(guò)期時(shí)間)
//key為了保存驗(yàn)證碼的值session:key: captcha_session_keydate: captcha_session_date//個(gè)人喜好server:port: 9090

這些常量都是無(wú)狀態(tài)的,我們將其交給Spring管理

@Component
@Data
@ConfigurationProperties(prefix = "captcha")
public class CaptchaProperties {private Integer width;private Integer height;private Session session;@Datapublic static class Session{private String key;private String date;}
}

我們將剛剛測(cè)試的代碼改一改就可以將驗(yàn)證碼圖片寫(xiě)入web網(wǎng)站上

首先創(chuàng)建驗(yàn)證碼對(duì)象,然后將驗(yàn)證碼寫(xiě)入其輸出流即可

然后為了多線程的問(wèn)題,我們不可以將驗(yàn)證碼屬性提出成公共屬性,以防被修改,我們可以使用session保存驗(yàn)證碼和生成驗(yàn)證碼的時(shí)間

獲取驗(yàn)證碼

@RequestMapping("/captcha")
@RestController
public class CaptchaController {
//過(guò)期時(shí)間為一分鐘private final static long session_valid_timeout = 60 * 1000;
//對(duì)象注入@Autowiredprivate CaptchaProperties captchaProperties;@RequestMapping("/get")public void getCaptcha(HttpSession session, HttpServletResponse response){
//獲取驗(yàn)證碼對(duì)象LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());try {
//寫(xiě)入輸出流lineCaptcha.write(response.getOutputStream());
//將驗(yàn)證碼設(shè)置到session中,方便驗(yàn)證session.setAttribute(captchaProperties.getSession().getKey(), lineCaptcha.getCode());session.setAttribute(captchaProperties.getSession().getDate(), new Date());} catch (IOException e) {throw new RuntimeException(e);}}

下面我們開(kāi)始設(shè)計(jì)檢查驗(yàn)證碼的邏輯

注:后端代碼最好是寫(xiě)一點(diǎn)檢查一點(diǎn),這樣方便排除錯(cuò)誤

?檢查驗(yàn)證碼

首先需要一個(gè)輸入的input獲取輸入框的數(shù)據(jù),從而和session中的數(shù)據(jù)進(jìn)行比較,注意先判空

 @RequestMapping("/check")public Boolean check(String input,HttpSession session) {if(!StringUtils.hasLength(input)) {return false;}String savedCode = (String) session.getAttribute(captchaProperties.getSession().getKey());Date savedDate = (Date) session.getAttribute(captchaProperties.getSession().getDate());if(input.equalsIgnoreCase(savedCode)) {if(savedDate!=null && System.currentTimeMillis()  - savedDate.getTime() < session_valid_timeout) {return true;}else{return false;}}return false;}
}

前端

前端書(shū)寫(xiě)大致了解會(huì)寫(xiě)就行

主要邏輯就是獲取輸入框中的文本交給后端的接口即可

注:這里的圖片地址建議加上一個(gè)時(shí)間戳,防止瀏覽器緩存

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>驗(yàn)證碼</title><style>#inputCaptcha {height: 30px;vertical-align: middle; }#verificationCodeImg{vertical-align: middle; }#checkCaptcha{height: 40px;width: 100px;}</style>
</head><body><h1>輸入驗(yàn)證碼</h1><div id="confirm"><input type="text" name="inputCaptcha" id="inputCaptcha"><img id="verificationCodeImg" src="/captcha/get" style="cursor: pointer;" title="看不清?換一張" /><input type="button" value="提交" id="checkCaptcha"></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$("#verificationCodeImg").click(function(){$(this).hide().attr('src', '/captcha/get?dt=' + new Date().getTime()).fadeIn();});$("#checkCaptcha").click(function () {$.ajax({url:"/captcha/check",type:"post",data:{input:$("#inputCaptcha").val(),},success:function(result){if(result) {location.href="success.html"}else{alert("驗(yàn)證碼錯(cuò)誤或超時(shí)")}}});});</script>
</body></html>

成果展示

成功則跳轉(zhuǎn),另一個(gè)網(wǎng)頁(yè)隨便寫(xiě)寫(xiě)就行

失敗則提示

http://www.risenshineclean.com/news/31687.html

相關(guān)文章:

  • 百姓網(wǎng)租房seo的定義是什么
  • 東勝網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃書(shū)的結(jié)構(gòu)
  • 用php寫(xiě)的網(wǎng)站有哪些友情鏈接是免費(fèi)的嗎
  • 企業(yè)網(wǎng)站建設(shè)的困難和問(wèn)題長(zhǎng)春seo技術(shù)
  • 網(wǎng)站關(guān)鍵詞選擇軟文推廣文案
  • 哪個(gè)旅游網(wǎng)站做的比較好免費(fèi)平臺(tái)推廣
  • p2p網(wǎng)站建設(shè)制作免費(fèi)發(fā)帖的網(wǎng)站
  • 專(zhuān)業(yè)網(wǎng)站建設(shè)首選公司沈陽(yáng)seo網(wǎng)站關(guān)鍵詞優(yōu)化
  • wordpress怎么可以出現(xiàn)表格seo接單平臺(tái)
  • dedecms網(wǎng)站開(kāi)發(fā)百度明星搜索量排行榜
  • 創(chuàng)做網(wǎng)站百度下載軟件
  • 兵團(tuán)建設(shè)環(huán)保局網(wǎng)站百度推廣有哪些售后服務(wù)
  • 如何做網(wǎng)站運(yùn)營(yíng)seo網(wǎng)站優(yōu)化師
  • dede做導(dǎo)航網(wǎng)站營(yíng)銷(xiāo)網(wǎng)站方案設(shè)計(jì)
  • 回收網(wǎng)站怎么做百度電視劇風(fēng)云榜
  • 一學(xué)一做看視頻網(wǎng)站有哪些網(wǎng)絡(luò)營(yíng)銷(xiāo)產(chǎn)品策略分析
  • 公司部門(mén)解散怎么賠償員工seo推薦
  • 企業(yè)網(wǎng)站優(yōu)化的三層含義網(wǎng)站推廣該怎么做
  • 網(wǎng)站作用微信營(yíng)銷(xiāo)的優(yōu)勢(shì)
  • 網(wǎng)站開(kāi)發(fā)論文文獻(xiàn)書(shū)籍友情鏈接的獲取途徑有哪些
  • 建設(shè)部資質(zhì)網(wǎng)站查詢(xún)成人就業(yè)技術(shù)培訓(xùn)機(jī)構(gòu)
  • 視頻網(wǎng)站logo怎么做的html底部友情鏈接代碼
  • 天津和平做網(wǎng)站多少錢(qián)怎么創(chuàng)建自己的游戲網(wǎng)站
  • 網(wǎng)站建設(shè)完畢后怎么加后臺(tái)線上營(yíng)銷(xiāo)推廣方案有哪些
  • 網(wǎng)站備案怎么關(guān)閉網(wǎng)站百度推廣多少錢(qián)一個(gè)月
  • 網(wǎng)站做線seo的優(yōu)化步驟
  • 手機(jī)系統(tǒng)網(wǎng)站windows優(yōu)化大師怎么徹底刪除
  • 做推文的網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)html代碼大全
  • 長(zhǎng)沙 外貿(mào)網(wǎng)站建設(shè)公司價(jià)格交換友鏈要注意什么
  • 網(wǎng)站左邊logo圖標(biāo)怎么做國(guó)家免費(fèi)技能培訓(xùn)平臺(tái)