1. 程式人生 > >簡單Maven的Web專案之驗證碼(Kaptcha篇)

簡單Maven的Web專案之驗證碼(Kaptcha篇)

一:Kaptcha介紹

簡單介紹:

kaptcha 是一個擴充套件自 simplecaptcha 的驗證碼庫,在 Java 程式設計中 是一個非常實用的驗證碼生成工具。我們可以利用這個工具生成各種樣式的驗證碼,因為它是可配置的,我們可以根據需求定製。 
工作原理:

kaptcha 的工作原理是呼叫 com.google.code.kaptcha.servlet.KaptchaServlet ,生成一個驗證碼圖片,響應到客戶端,同時將生成的真是的驗證碼字串放到 HttpSession 中。 
使用kaptcha可以方便的配置:

  1. 驗證碼的字型
  2. 驗證碼字型的大小
  3. 驗證碼字型的字型顏色
  4. 驗證碼內容的範圍(數字,字母,中文漢字!)
  5. 驗證碼圖片的大小,邊框,邊框粗細,邊框顏色
  6. 驗證碼的干擾線(可以自己繼承com.google.code.kaptcha.NoiseProducer寫一個自定義的干擾線)
  7. 驗證碼的樣式(魚眼樣式、3D、普通模糊……當然也可以繼承com.google.code.kaptcha.GimpyEngine自定義樣式)

二:使用Kaptcha生成驗證碼

  1. mvn install:install-file-DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.2-Dfile=D:\kaptcha-2.3.jar -Dpackaging=jar

    -DgeneratePom=true

  2.     <dependency>  
            <groupId>com.google.code</groupId>  
            <artifactId>kaptcha</artifactId>  
            <version>2.3.2</version>  
        </dependency>

    <!-- 驗證碼 -->
    <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
    <property name="config">
    <bean class="com.google.code.kaptcha.util.Config">
    <constructor-arg>
    <props>
    <prop key="kaptcha.border">yes</prop>
    <prop key="kaptcha.border.color">105,179,90</prop>
    <prop key="kaptcha.textproducer.font.color">blue</prop>
    <prop key="kaptcha.image.width">105</prop>
    <prop key="kaptcha.image.height">40</prop>
    <prop key="kaptcha.textproducer.font.size">30</prop>
    <prop key="kaptcha.session.key">s_kaptcha_code</prop>
    <prop key="kaptcha.textproducer.char.space">2</prop>
    <prop key="kaptcha.textproducer.char.length">5</prop>
    <prop key="kaptcha.textproducer.font.names">宋體,楷體,微軟雅黑</prop>
    </props>
    </constructor-arg>
    </bean>
    </property>
    </bean>
  3. @Autowired
    private com.google.code.kaptcha.impl.DefaultKaptcha captchaProducer; 

  4. @RequestMapping(value = "/login/captcha.jpg")
    public ModelAndView getCaptcha(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    response.setDateHeader("Expires", 0);  
            response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");  
            response.addHeader("Cache-Control", "post-check=0, pre-check=0");  
            response.setHeader("Pragma", "no-cache");  
            response.setContentType("image/jpeg");  
             
            String capText = captchaProducer.createText();  
            request.getSession().setAttribute(Consts.S_KaptchaCode, capText);  
             
            BufferedImage bi = captchaProducer.createImage(capText);  
            ServletOutputStream out = response.getOutputStream();  
            ImageIO.write(bi, "jpg", out);  
            try {  
                out.flush();
            } finally {  
                out.close();  
            }  
            return null; 
    }