constants类详解

图标

豆瓜

豆瓜网

豆瓜网专栏

豆瓜 图标 2020-07-18 09:29:58

1、遇到代码中的问题

1
2
3
4
String userName = (String) request.getParameter("userName");
        String passWord = (String) request.getParameter("passWord");
        String inputKaptcha = (String) request.getParameter("kaptcha");          //下面这句代码是什么意思???
        String sessionKaptcha = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);

2、查询解决

  a、Constants

    com.google.code.kaptcha.Constants,这是该类所属的jar包,经过查询后,发现这是谷歌开发的一个验证码生产工具,

3、kaptcha 工具介绍

 a、生成验证码的原理

  kaptcha 是一个非常实用的验证码生成工具。有了它,你可以生成各种样式的验证码,因为它是可配置的。kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中。

 b、可以实现的功能

  • 验证码的字体

  • 验证码字体的大小

  • 验证码字体的字体颜色

  • 验证码内容的范围(数字,字母,中文汉字!)

  • 验证码图片的大小,边框,边框粗细,边框颜色

  • 验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线)

  • 验证码的样式(鱼眼样式、3D、普通模糊……当然也可以继承com.google.code.kaptcha.GimpyEngine自定义样式)

  c、下载相关的jar包 

  1.首先去官网下载jar:http://code.google.com/p/kaptcha/

  2.建立一个web项目,导入kaptcha-2.3.jar到环境变量中。

  d、web.xml配置

  代码如下:

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!--Kaptcha 验证码  --><!-- 
    <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.border.color</param-name> 
            <param-value>105,179,90</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>250</param-value> 
        </init-param> 
        <init-param> 
            <param-name>kaptcha.image.height</param-name> 
            <param-value>90</param-value> 
        </init-param> 
        <init-param> 
            <param-name>kaptcha.textproducer.font.size</param-name> 
            <param-value>70</param-value> 
        </init-param> 
        <init-param> 
            <param-name>kaptcha.session.key</param-name> 
            <param-value>code</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>宋体,楷体,微软雅黑</param-value> 
        </init-param>      
    </servlet> 

  

1
2
3
4
<servlet-mapping> 
<servlet-name>kaptcha</servlet-name> 
<url-pattern>/ClinicCountManager/kaptcha.jpg</url-pattern> 
lt;/servlet-mapping> 

 e、jsp页面中使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<table> 
        <tr> 
            <td><img src="/ClinicCountManager/kaptcha.jpg"></td> 
            <td valign="top"> 
           
                <form method="POST"> 
                    <br>sec code:<input type="text" name="kaptchafield"><br /> 
                    <input type="submit" name="submit"> 
                </form> 
            </td> 
        </tr> 
    </table>   
   
    <br /><br /><br /><br /> 
       
    <% 
        String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); 
        String parm = (String) request.getParameter("kaptchafield"); 
           
        out.println("Parameter: " + parm + " ? Session Key: " + c + " : "); 
           
        if (c != null && parm != null) { 
            if (c.equals(parm)) { 
                out.println("<b>true</b>"); 
            } else { 
                out.println("<b>false</b>"); 
            } 
           
    %> 

  上面的配置在普通jsp环境下面是有效的,如果在spring mvc环境下,则取不到session值,对于sping mvc环境验证码配置如下:

  不用在web.xml进行相关配置,在applicationContext.xml中配置:

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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">no</prop> 
                        <prop key="kaptcha.border.color">105,179,90</prop> 
                        <prop key="kaptcha.textproducer.font.color">red</prop> 
                        <prop key="kaptcha.image.width">250</prop> 
                        <prop key="kaptcha.textproducer.font.size">90</prop> 
                        <prop key="kaptcha.image.height">90</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> 

 f、新建生成代码的类

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
import javax.servlet.ServletOutputStream; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 
import com.google.code.kaptcha.Constants; 
import com.google.code.kaptcha.Producer; 
   
@Controller 
@RequestMapping("/") 
public class CaptchaImageCreateController { 
       
    private Producer captchaProducer = null; 
   
    @Autowired 
    public void setCaptchaProducer(Producer captchaProducer) { 
        this.captchaProducer = captchaProducer; 
    } 
   
    @RequestMapping("/captcha-image") 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
   
        response.setDateHeader("Expires", 0); 
        // Set standard HTTP/1.1 no-cache headers. 
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
        // Set IE extended HTTP/1.1 no-cache headers (use addHeader). 
        response.addHeader("Cache-Control", "post-check=0, pre-check=0"); 
        // Set standard HTTP/1.0 no-cache header. 
        response.setHeader("Pragma", "no-cache"); 
        // return a jpeg 
        response.setContentType("image/jpeg"); 
        // create the text for the image 
        String capText = captchaProducer.createText(); 
        // store the text in the session 
        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText); 
        // create the image with the text 
        BufferedImage bi = captchaProducer.createImage(capText); 
        ServletOutputStream out = response.getOutputStream(); 
        // write the data out 
        ImageIO.write(bi, "jpg", out); 
        try { 
            out.flush(); 
        } finally { 
            out.close(); 
        } 
        return null; 
    } 
   

 g、前台调用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="chknumber"> 
       <label>验证码:         
       <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />              
       </label> 
        <img src="/ClinicCountManager/captcha-image.do" width="55" height="20" id="kaptchaImage"  style="margin-bottom: -3px"/>  
       <script type="text/javascript">     
        $(function(){          
            $('#kaptchaImage').click(function () {//生成验证码 
             $(this).hide().attr('src', '/ClinicCountManager/captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); })     
                  });  
         
       </script>  
     </div> 

 h、取验证码的方式

1
String code = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); 

 i、验证码全部是数字

1
2
3
4
<init-param>      
    <param-name>kaptcha.textproducer.char.string</param-name>      
    <param-value>0123456789</param-value>      
</init-param>

 j、去掉干扰线

1
2
3
4
<init-param> 
    <param-name>kaptcha.noise.impl</param-name> 
    <param-value>com.google.code.kaptcha.impl.NoNoise </param-value> 
</init-param> 


本文由豆瓜网专栏作家 豆瓜 投稿发布,并经过豆瓜网编辑审核。

转载此文章须经作者同意,并附上出处(豆瓜网)及本页链接。

若稿件文字、图片、视频等内容侵犯了您的权益,请联系本站进行 投诉处理

相关搜索

constants
图标 图标

豆瓜

豆瓜网

豆瓜网专栏

  • constants类详解

    图标
    豆瓜 图标 · 今天 09:29:58 · 2浏览
  • 01背包问题详解

    图标
    豆瓜 图标 · 今天 09:22:45 · 0浏览
  • mysql jdbc链接数据库问题

    图标
    豆瓜 图标 · 今天 09:16:34 · 4浏览
  • 全部评论

    豆瓜

    豆瓜网

    豆瓜网专栏

  • constants类详解
  • 01背包问题详解
  • mysql jdbc链接数据库问题
  • 滚动条样式自定义
  • int型最大数2147483647详解
  • 我来说两句