Spring總結(jié)二--配置驗(yàn)證碼

在許多網(wǎng)頁中我們都可以看到驗(yàn)證碼的存在鸟雏,驗(yàn)證碼就是用來進(jìn)行人機(jī)識(shí)別的陆盘,防止腳本或爬蟲無限制地請(qǐng)求網(wǎng)頁導(dǎo)致資源浪費(fèi)流强,本篇博客就是介紹如何在Spring和Springboot中配置驗(yàn)證碼模塊。

本博客使用的驗(yàn)證碼包wiki地址https://code.google.com/archive/p/kaptcha/

Maven導(dǎo)包

首先在Maven中導(dǎo)入使用驗(yàn)證碼所需要使用到的包

<dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
</dependency>

Web.xml配置Servlet參數(shù)

接著我們進(jìn)入Web.xml,來配置驗(yàn)證碼相關(guān)的Servlet和具體的參數(shù)魄眉,就按照普通Servlet的配置方法争占,Servlet的類名為com.google.code.kaptcha.servlet.KaptchaServlet燃逻,在servlet-mapping中配置/Kaptcha截獲驗(yàn)證碼請(qǐng)求到Servlet,最后在Servlet中配置init-param參數(shù)臂痕。

<servlet>
        <servlet-name>Kaptcha</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <!-- 有無邊框 -->
        <init-param>
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <!-- 圖片顏色 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.color</param-name>
            <param-value>red</param-value>
        </init-param>
        <!-- 圖片寬度 -->
        <init-param>
            <param-name>kaptcha.image.width</param-name>
            <param-value>125</param-value>
        </init-param>
        <!-- 使用那些字符產(chǎn)生驗(yàn)證碼 -->
        <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <param-value>ACDEFHKPRSTWX345679</param-value>
        </init-param>
        <!-- 圖片高度 -->
        <init-param>
            <param-name>kaptcha.image.height</param-name>
            <param-value>50</param-value>
        </init-param>
        <!-- 字體大小 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.size</param-name>
            <param-value>43</param-value>
        </init-param>
        <!-- 干擾線的顏色 -->
        <init-param>
            <param-name>kaptcha.noise.color</param-name>
            <param-value>black</param-value>
        </init-param>
        <!-- 字符個(gè)數(shù) -->
        <init-param>
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <!-- 字符字體 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.names</param-name>
            <param-value>Arial</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Kaptcha</servlet-name>
        <url-pattern>/Kaptcha</url-pattern>
    </servlet-mapping>

網(wǎng)頁使用

在前端網(wǎng)頁里只要向'項(xiàng)目地址/Kaptcha'發(fā)起請(qǐng)求就可以獲得驗(yàn)證碼了伯襟,具體代碼如下:

 <img id="captcha_img" alt="點(diǎn)擊更換" title="點(diǎn)擊更換"
                  onclick="changeVerifyCode(this)" src="../Kaptcha" />

由于隨機(jī)產(chǎn)生的驗(yàn)證碼可能不是很清楚,所以最好加一個(gè)點(diǎn)擊事件點(diǎn)擊驗(yàn)證碼就可以更換一張驗(yàn)證碼握童,js代碼如下:

function changeVerifyCode(img) {
    img.src="../Kaptcha?"+Math.floor(Math.random()*100);
}

后端驗(yàn)證

用戶填寫了驗(yàn)證碼姆怪,向服務(wù)器發(fā)起了request,這個(gè)request就包含了用戶輸入的驗(yàn)證碼澡绩,后臺(tái)的工作就是需要驗(yàn)證驗(yàn)證碼是否填寫正確了稽揭,如果填寫錯(cuò)誤則需要立即返回錯(cuò)誤信息告知用戶,驗(yàn)證碼的正確內(nèi)容是存在session的Constants.KAPTCHA_SESSION_KEY中肥卡,所以我們只需要取出正確的驗(yàn)證碼內(nèi)容和用戶輸入的驗(yàn)證碼內(nèi)容就可以完成驗(yàn)證溪掀。

public class CodeUtil
{
    public static boolean checkVerifyCode(HttpServletRequest request)
    {
        String verifyCodeExpected= (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
        String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
        if (verifyCodeActual == null || !verifyCodeActual.toLowerCase().equals(verifyCodeExpected.toLowerCase()))
        {
            return false;
        }
        return true;
    }
}

可以寫一個(gè)工具類來復(fù)用代碼

SpringBoot的驗(yàn)證碼配置

SpringBoot的配置其實(shí)和Spring的配置是差不多的,只不過SpringBoot崇尚去xml化步鉴,以上所有在xml上書寫的內(nèi)容都需要在代碼中配置揪胃。

首先在application.properties中把要用的參數(shù)信息提前寫好

#Kaptcha相關(guān)
kaptcha.border=no
kaptcha.textproducer.font.color=red
kaptcha.image.width=135
kaptcha.textproducer.char.string=ACDEFHKPRSTWX345679
kaptcha.image.height=50
kaptcha.textproducer.font.size=43
kaptcha.noise.color=black
kaptcha.textproducer.char.length=4
kaptcha.textproducer.font.names=Arial

其次我們需要在@Configuration配置文件中自行配置一個(gè)Servlet來取代之前在Web.xml中的操作,其實(shí)具體操作很簡(jiǎn)單也和之前很相似,聲明一個(gè)映射特定路徑的 Servlet 氛琢,或是需要配置初始化參數(shù)的話只嚣,需要使用ServletRegistrationBean

@Bean(name="captchaProducer")
    public ServletRegistrationBean servletRegistrationBean() throws ServletException
    {
        ServletRegistrationBean servlet = new ServletRegistrationBean(new KaptchaServlet(), "/Kaptcha");
        servlet.addInitParameter("kaptcha.border", border);
        servlet.addInitParameter("kaptcha.textproducer.font.color", fcolor);
        servlet.addInitParameter("kaptcha.image.width", width);
        servlet.addInitParameter("kaptcha.textproducer.char.string", cString);
        servlet.addInitParameter("kaptcha.image.height", height);
        servlet.addInitParameter("kaptcha.textproducer.font.size", fsize);
        servlet.addInitParameter("kaptcha.noise.color", nColor);
        servlet.addInitParameter("kaptcha.textproducer.char.length", clength);
        servlet.addInitParameter("kaptcha.textproducer.font.names", fnames);
        return servlet;
    }

至此SpringBoot的驗(yàn)證碼就配置完了艺沼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蕴掏,隨后出現(xiàn)的幾起案子障般,更是在濱河造成了極大的恐慌调鲸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挽荡,死亡現(xiàn)場(chǎng)離奇詭異藐石,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)定拟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門于微,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人青自,你說我怎么就攤上這事株依。” “怎么了延窜?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵恋腕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我逆瑞,道長(zhǎng)荠藤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任获高,我火速辦了婚禮哈肖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘念秧。我一直安慰自己淤井,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布出爹。 她就那樣靜靜地躺著庄吼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪严就。 梳的紋絲不亂的頭發(fā)上总寻,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音梢为,去河邊找鬼渐行。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铸董,可吹牛的內(nèi)容都是我干的祟印。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粟害,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蕴忆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悲幅,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤套鹅,失蹤者是張志新(化名)和其女友劉穎站蝠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卓鹿,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菱魔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吟孙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜倦。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杰妓,靈堂內(nèi)的尸體忽然破棺而出藻治,到底是詐尸還是另有隱情,我是刑警寧澤稚失,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布栋艳,位于F島的核電站,受9級(jí)特大地震影響句各,放射性物質(zhì)發(fā)生泄漏吸占。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一凿宾、第九天 我趴在偏房一處隱蔽的房頂上張望矾屯。 院中可真熱鬧,春花似錦初厚、人聲如沸件蚕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽排作。三九已至,卻和暖如春亚情,著一層夾襖步出監(jiān)牢的瞬間妄痪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工楞件, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衫生,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓土浸,卻偏偏與公主長(zhǎng)得像罪针,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子黄伊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理泪酱,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,809評(píng)論 6 342
  • 從三月份找實(shí)習(xí)到現(xiàn)在西篓,面了一些公司愈腾,掛了不少,但最終還是拿到小米岂津、百度、阿里悦即、京東吮成、新浪、CVTE辜梳、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,243評(píng)論 11 349
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法粱甫,類相關(guān)的語法,內(nèi)部類的語法作瞄,繼承相關(guān)的語法茶宵,異常的語法,線程的語...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 女:我在西域的冬日和朋友失聯(lián)宗挥, 你在茫茫的高原里麻衣勝雪乌庶。 古老的轉(zhuǎn)經(jīng)軸轉(zhuǎn)了數(shù)千遍, 也沒能讓我逃脫遇見你的劫契耿。 ...
    言傾卿閱讀 321評(píng)論 0 0