Spring總結--配置驗證碼

在許多網頁中咱們均可以看到驗證碼的存在,驗證碼就是用來進行人機識別的,防止腳本或爬蟲無限制地請求網頁致使資源浪費,本篇博客就是介紹如何在Spring和Springboot中配置驗證碼模塊。html

本博客使用的驗證碼包wiki地址https://code.google.com/archive/p/kaptcha/前端

Maven導包

首先在Maven中導入使用驗證碼所須要使用到的包java

<dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
</dependency>
複製代碼

Web.xml配置Servlet參數

接着咱們進入Web.xml,來配置驗證碼相關的Servlet和具體的參數,就按照普通Servlet的配置方法,Servlet的類名爲com.google.code.kaptcha.servlet.KaptchaServlet,在servlet-mapping中配置/Kaptcha截獲驗證碼請求到Servlet,最後在Servlet中配置init-param參數。git

<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>
        <!-- 使用那些字符產生驗證碼 -->
        <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>
        <!-- 字符個數 -->
        <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>
複製代碼

網頁使用

在前端網頁裏只要向'項目地址/Kaptcha'發起請求就能夠得到驗證碼了,具體代碼以下:github

<img id="captcha_img" alt="點擊更換" title="點擊更換" onclick="changeVerifyCode(this)" src="../Kaptcha" />
複製代碼

因爲隨機產生的驗證碼可能不是很清楚,因此最好加一個點擊事件點擊驗證碼就能夠更換一張驗證碼,js代碼以下:後端

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

後端驗證

用戶填寫了驗證碼,向服務器發起了request,這個request就包含了用戶輸入的驗證碼,後臺的工做就是須要驗證驗證碼是否填寫正確了,若是填寫錯誤則須要當即返回錯誤信息告知用戶,驗證碼的正確內容是存在session的Constants.KAPTCHA_SESSION_KEY中,因此咱們只須要取出正確的驗證碼內容和用戶輸入的驗證碼內容就能夠完成驗證。服務器

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;
    }
}
複製代碼

能夠寫一個工具類來複用代碼session

SpringBoot的驗證碼配置

SpringBoot的配置其實和Spring的配置是差很少的,只不過SpringBoot崇尚去xml化,以上全部在xml上書寫的內容都須要在代碼中配置。app

首先在application.properties中把要用的參數信息提早寫好dom

#Kaptcha相關
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配置文件中自行配置一個Servlet來取代以前在Web.xml中的操做,其實具體操做很簡單也和以前很類似,聲明一個映射特定路徑的 Servlet ,或是須要配置初始化參數的話,須要使用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的驗證碼就配置完了。

相關文章
相關標籤/搜索