• 使用kaptcha验证码组件操作演示


    1、创建一个Maven项目

    2、在pom.xml中引入相关依赖

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     3   <modelVersion>4.0.0</modelVersion>
     4   <groupId>com.wisezone</groupId>
     5   <artifactId>wdh_kaptcha</artifactId>
     6   <packaging>war</packaging>
     7   <version>0.0.1-SNAPSHOT</version>
     8   <name>wdh_kaptcha Maven Webapp</name>
     9   <url>http://maven.apache.org</url>
    10   
    11    <properties>
    12     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    13       <!-- 定义spring的版本变量在dependency里面直接引用 -->
    14     <spring.version>4.3.2.RELEASE</spring.version>
    15     <slf4j.version>1.7.2</slf4j.version>
    16   </properties>
    17   
    18   <dependencies>
    19         <!-- spring mvc -->
    20         <dependency>
    21             <groupId>org.springframework</groupId>
    22             <artifactId>spring-webmvc</artifactId>
    23             <version>${spring.version}</version>
    24         </dependency>
    25         <!-- web开发要有servlet -->
    26         <dependency>
    27             <groupId>javax.servlet</groupId>
    28             <artifactId>javax.servlet-api</artifactId>
    29             <version>3.0.1</version>
    30         </dependency>
    31 
    32         <!-- 日志打印相关的jar -->
    33         <dependency>
    34             <groupId>org.slf4j</groupId>
    35             <artifactId>slf4j-log4j12</artifactId>
    36             <version>${slf4j.version}</version>
    37         </dependency>
    38         <dependency>
    39             <groupId>org.slf4j</groupId>
    40             <artifactId>slf4j-api</artifactId>
    41             <version>${slf4j.version}</version>
    42         </dependency>
    43 
    44         <!-- 验证码的生成 -->
    45         <dependency>
    46             <groupId>com.github.axet</groupId>
    47             <artifactId>kaptcha</artifactId>
    48             <version>0.0.9</version>
    49         </dependency>
    50   </dependencies>
    51    <build>
    52         <finalName>wdh_kaptcha</finalName>
    53         <!-- 资源文件的设置 -->
    54         <resources>
    55             <resource>
    56                 <directory>src/main/resources</directory>
    57             </resource>
    58             <resource>
    59                 <directory>src/main/java</directory>
    60                 <includes>
    61                     <include>**/*.properties</include>
    62                     <include>**/*.xml</include>
    63                 </includes>
    64                 <!-- 是否替换资源中的属性 -->
    65                 <filtering>false</filtering>
    66             </resource>
    67         </resources>
    68         <plugins>
    69             <!-- compiler plugin -->
    70             <plugin>
    71                 <groupId>org.apache.maven.plugins</groupId>
    72                 <artifactId>maven-compiler-plugin</artifactId>
    73                 <version>2.3.2</version>
    74                 <configuration>
    75                     <source>1.7</source>
    76                     <target>1.7</target>
    77                     <encoding>UTF-8</encoding>
    78                     <compilerArguments>
    79                         <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
    80                     </compilerArguments>
    81                 </configuration>
    82             </plugin>
    83             <plugin>
    84                 <groupId>org.eclipse.jetty</groupId>
    85                 <artifactId>jetty-maven-plugin</artifactId>
    86                 <version>9.2.1.v20140609</version>
    87             </plugin>
    88         </plugins>
    89     </build>
    90 </project>

    3、启动WEB容器要在web.xml中配置前端控制器(DispatcherServlet)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app id="WebApp_ID" version="3.0"
     3     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     5   <servlet>
     6         <servlet-name>appServlet</servlet-name>
     7         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     8         <init-param>
     9             <param-name>contextConfigLocation</param-name>
    10             <param-value>classpath:*.xml</param-value>
    11         </init-param>
    12         <!-- 表示启动容器时初始化该Servlet -->
    13         <load-on-startup>1</load-on-startup>
    14 
    15     </servlet>
    16     
    17     <servlet-mapping>
    18         <servlet-name>appServlet</servlet-name>
    19         <!-- 这是拦截请求, /代表拦截所有请求, 也可以是.html或者.action这类的 -->
    20         <url-pattern>/</url-pattern>
    21     </servlet-mapping>
    22     
    23     <filter>
    24         <filter-name>CharacterEncodingFilter</filter-name>
    25         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    26         <init-param>
    27             <param-name>encoding</param-name>
    28             <param-value>UTF-8</param-value>
    29         </init-param>
    30     </filter>
    31     <filter-mapping>
    32         <filter-name>CharacterEncodingFilter</filter-name>
    33         <url-pattern>/*</url-pattern>
    34     </filter-mapping>
    35 </web-app>

    4、src/main/resources中配置相关信息

    a、log4j.properties

     1 log4j.rootLogger=DEBUG, Console  
     2   
     3 #Console  
     4 log4j.appender.Console=org.apache.log4j.ConsoleAppender  
     5 log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
     6 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
     7  
     8 log4j.logger.java.sql.ResultSet=INFO  
     9 log4j.logger.org.apache=INFO  
    10 log4j.logger.java.sql.Connection=DEBUG  
    11 log4j.logger.java.sql.Statement=DEBUG  
    12 log4j.logger.java.sql.PreparedStatement=DEBUG 

    b、servlet-context.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:p="http://www.springframework.org/schema/p"
     6     xsi:schemaLocation=" 
     7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9         
    10     <!-- 扫描package方便注解依赖注入-->
    11     <context:component-scan base-package="com.wisezone" />
    12 
    13     <!--图片验证码配置 -->
    14     <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
    15         <property name="config">
    16             <bean class="com.google.code.kaptcha.util.Config">
    17                 <constructor-arg>
    18                     <props>
    19                         <prop key="kaptcha.border">yes</prop><!--是否有边框 -->
    20                         <prop key="kaptcha.border.color">105,179,90</prop><!--设置边框颜色 -->
    21                         <prop key="kaptcha.textproducer.font.color">green</prop><!--验证码文本字符颜色 默认为Color.BLACK -->
    22                         <prop key="kaptcha.session.key">code</prop><!--验证码 -->
    23                         <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop><!--设置字体样式 -->
    24                         <prop key="kaptcha.border.thickness"></prop><!--边框粗细度 默认为1 -->
    25                         <prop key="kaptcha.producer.impl"></prop><!--验证码生成器 默认为DefaultKaptcha -->
    26                         <prop key="kaptcha.textproducer.impl"></prop><!-- 验证码文本生成器 默认为DefaultTextCreator -->
    27                         <prop key="kaptcha.textproducer.char.string"></prop><!--验证码文本字符内容范围 默认为abcde2345678gfynmnpwx -->
    28                         <prop key="kaptcha.textproducer.char.length">4</prop><!-- 验证码文本字符长度 默认为5 -->
    29                         <prop key="kaptcha.textproducer.font.size">50</prop><!--验证码文本字符大小 默认为40 -->
    30                         <prop key="kaptcha.textproducer.char.space">6</prop>    <!--验证码文本字符间距 默认为2 -->
    31                         <prop key="kaptcha.image.width">200</prop>    <!--验证码图片宽度 默认为200 -->
    32                         <prop key="kaptcha.image.height">60</prop> <!--验证码图片高度 默认为40 -->
    33                     </props>
    34                 </constructor-arg>
    35             </bean>
    36         </property>
    37     </bean>
    38     
    39 
    40 </beans>

    5、Demo演示

    KaptchaController.java

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

    6、启动容器查看结果:

    浏览器:http://localhost:8080/kaptcha/getKaptchaImage

  • 相关阅读:
    获取网页可视区域的宽高,不包括工具栏和滚动条(浏览器窗口可视区域大小)
    display:inline-block 来解决盒子高度不一样,造成的盒子浮动
    Jquery UI 中的datepicker() ,获取日期后的回调函数onClose()
    删除url搜索带的参数
    判断表单是否需要校验时可以按照类似逻辑去处理
    去除url中锚点的方法
    js常面试基础题
    vue项目总结
    vue-router
    回流与重绘
  • 原文地址:https://www.cnblogs.com/wdh1995/p/7096143.html
Copyright © 2020-2023  润新知