java-captcha實現驗證碼(二)

來源:互聯網
上載者:User

標籤:kaptcha   驗證碼   

captcha實現驗證碼驗證使用者登入,防止密碼被暴力破解。

下面是在Springmvc架構中運行。

匯入的jar包:kaptcha-2.3.2.jar

:http://download.csdn.net/detail/u013147600/9052871

或是在maven ---pom.xml:配置如下

 <!-- 驗證碼工具 -->
<dependency>  
<groupId>com.google.code</groupId>
  <artifactId>kaptcha</artifactId>
<version>2.3.2</version>  
</dependency>  

Web.xml的配置

<span style="font-size:14px;"><!-- 驗證碼Servlet --> <servlet> <servlet-name>kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class> </servlet>  <servlet-mapping>  <servlet-name>kaptcha</servlet-name>  <url-pattern>/kaptcha.jpg</url-pattern>  </servlet-mapping></span>

springmvc.xml 配置

(captchaProducer相當於一個類,使用者而已根據自己的要求對其屬性進行修改)

<span style="font-size:14px;"><!-- captcha一些屬性的配置 --><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">125</prop>                          <prop key="kaptcha.image.height">45</prop>                          <prop key="kaptcha.textproducer.font.size">45</prop>                          <prop key="kaptcha.session.key">code</prop>                          <prop key="kaptcha.textproducer.char.length">4</prop>                          <prop key="kaptcha.textproducer.font.names">宋體,楷體,微軟雅黑</prop>                      </props>                  </constructor-arg>              </bean>          </property>      </bean></span>

SpringUtils.java 解析類

(用於解析springmvc.xml中的bean)

<span style="font-size:14px;">package com.authc.utils;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @author lyx * * 2015-8-18下午3:53:19 * *com.utils.SpringUtil *TODO */public class SpringUtil {private static ApplicationContext ctx =new ClassPathXmlApplicationContext("springmvc.xml");public static Object getBean(String beanId){return ctx.getBean(beanId);}}</span>


UserController控制層類

<span style="font-size:14px;">@Controller@RequestMapping("/member")public class UserController {    private Producer captchaProducer;        @RequestMapping(value = "captcha-image")      public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {          HttpSession session = request.getSession();                 //擷取springmvc.xml中的captchaProducer Bean        captchaProducer = (Producer) SpringUtil.getBean("captchaProducer");                  String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);          System.out.println("系統產生的驗證碼: " + code );                     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();          //將系統產生的驗證碼放入Session中        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);                   BufferedImage bi = captchaProducer.createImage(capText);          ServletOutputStream out = response.getOutputStream();          ImageIO.write(bi, "jpg", out);          try {              out.flush();          } finally {              out.close();          }          return null;      }          @RequestMapping("/checkCode")public String checkCode(HttpServletRequest request){//擷取使用者輸入的驗證碼String submitCode = WebUtils.getCleanParam(request,"j_code");//從session中擷取系統產生的驗證碼String kaptchaExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); System.out.println("使用者輸入的驗證碼是:"+submitCode+",系統產生的驗證碼:"+kaptchaExpected);//進行比較if(StringUtils.isEmpty(submitCode) || StringUtils.equalsIgnoreCase(submitCode, kaptchaExpected)){request.setAttribute("checkCode","驗證碼正確!");}else{request.setAttribute("checkCode","驗證碼錯誤!");}return "/kaptcha";}}</span>
註:這裡是在Controller中進行驗證,比較合適的方法應該是在js裡面對使用者輸入的驗證碼進行驗證

kaptcha.jsp頁面

<span style="font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page isELIgnored="false"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>驗證碼</title>  <script type="text/javascript" src="<%=request.getContextPath()%>/res/js/jquery-1.11.3.min.js">  </script></head>    <body>    <script type="text/javascript"> $(function(){  //產生驗證碼             $('#kaptchaImage').click(function () {      $(this).hide().attr('src', '<%=path%>/member/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn(); });      });    window.onbeforeunload = function(){      //關閉視窗時自動結束      if(event.clientX>360&&event.clientY<0||event.altKey){             alert(parent.document.location);      }  };               function changeCode() {  //重新整理    $('#kaptchaImage').hide().attr('src', '<%=path%>/member/captcha-image?' + Math.floor(Math.random()*100) ).fadeIn();      event.cancelBubble=true;  }  </script>  <div class="form-group">     <label>驗證碼 </label>    <form action="<%=path%>/member/checkCode">   <input name="j_code" type="text" id="kaptcha" maxlength="4" class="form-control" />   <br/>    <img src="<%=path%>/member/captcha-image" id="kaptchaImage"  style="margin-bottom: -3px"/>          <a href="#" onclick="changeCode()">看不清?換一張</a>     <input type="submit" value="驗證">      <span>${checkCode }</span>   </form></div>  </body></html></span>


kaptcha可配置項:

kaptcha.border  是否有邊框  預設為true  我們可以自己設定yes,nokaptcha.border.color   邊框顏色   預設為Color.BLACKkaptcha.border.thickness  邊框粗細度  預設為1kaptcha.producer.impl   驗證碼產生器  預設為DefaultKaptchakaptcha.textproducer.impl   驗證碼文本產生器  預設為DefaultTextCreatorkaptcha.textproducer.char.string   驗證碼文本字元內容約制  預設為abcde2345678gfynmnpwxkaptcha.textproducer.char.length   驗證碼文本字元長度  預設為5kaptcha.textproducer.font.names    驗證碼文本字型樣式  預設為new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)kaptcha.textproducer.font.size   驗證碼文本字元大小  預設為40kaptcha.textproducer.font.color  驗證碼文本字元顏色  預設為Color.BLACKkaptcha.textproducer.char.space  驗證碼文本字元間距  預設為2kaptcha.noise.impl    驗證碼噪點產生對象  預設為DefaultNoisekaptcha.noise.color   驗證碼噪點顏色   預設為Color.BLACKkaptcha.obscurificator.impl   驗證碼樣式引擎  預設為WaterRipplekaptcha.word.impl   驗證碼文本字元渲染   預設為DefaultWordRendererkaptcha.background.impl   驗證碼背景產生器   預設為DefaultBackgroundkaptcha.background.clear.from   驗證碼背景顏色漸進   預設為Color.LIGHT_GRAYkaptcha.background.clear.to   驗證碼背景顏色漸進   預設為Color.WHITEkaptcha.image.width   驗證碼圖片寬度  預設為200kaptcha.image.height  驗證碼圖片高度  預設為50 

簡單的:



參考:http://blog.csdn.net/rambo_china/article/details/7720181

http://cuisuqiang.iteye.com/blog/2048428



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java-captcha實現驗證碼(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.