本文将使用Jcaptcha实现校验码验证,并演示在Spring/SpringMVC环境下的使用方法。
1. maven依赖
<dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha-all</artifactId> <version>1.0-RC6</version> <exclusions> <exclusion> <groupId>quartz</groupId> <artifactId>quartz</artifactId> </exclusion> <exclusion> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> </exclusion> <exclusion> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> </exclusion> <exclusion> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> </exclusion> <exclusion> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </exclusion> <exclusion> <groupId>concurrent</groupId> <artifactId>concurrent</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> </exclusion> <exclusion> <groupId>xerces</groupId> <artifactId>xmlParserAPIs</artifactId> </exclusion> </exclusions> </dependency>
注:请按需对需要排除的依赖进行增减
2. 需要将Jcaptcha的Bean加入Spring管理,故新增Spring-Jcaptcha的配置文件。web.xml中
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:applicationContext.xml classpath*:applicationContext-captcha.xml </param-value> </context-param>
3. applicationContext-captcha.xml的内容
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="true"> <bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService"> <constructor-arg index="0" ref="imageEngine" /> <constructor-arg type="int" index="1" value="180" /> <constructor-arg type="int" index="2" value="100000" /> </bean> <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine"> <constructor-arg index="0"> <list> <ref bean="captchaFactory" /> </list> </constructor-arg> </bean> <bean id="captchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory"> <constructor-arg> <ref bean="wordgen" /> </constructor-arg> <constructor-arg> <ref bean="wordtoimage" /> </constructor-arg> </bean> <bean id="wordgen" class="com.octo.captcha.component.word.wordgenerator.RandomWordGenerator"> <!--可选字符--> <constructor-arg> <value> 0123456789abcdefghijklmnopqrstuvwxyz </value> </constructor-arg> </bean> <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage"> <constructor-arg index="0"> <ref bean="fontGenRandom" /> </constructor-arg> <constructor-arg index="1"> <ref bean="backGenUni" /> </constructor-arg> <constructor-arg index="2"> <ref bean="decoratedPaster" /> </constructor-arg> </bean> <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator"> <!--最小字体--> <constructor-arg index="0"> <value>20</value> </constructor-arg> <!--最大字体--> <constructor-arg index="1"> <value>20</value> </constructor-arg> <constructor-arg index="2"> <list> <bean class="java.awt.Font"> <constructor-arg index="0"> <value>Arial</value> </constructor-arg> <constructor-arg index="1"> <value>0</value> </constructor-arg> <constructor-arg index="2"> <value>20</value> </constructor-arg> </bean> </list> </constructor-arg> </bean> <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator"> <!--背景宽度--> <constructor-arg index="0"> <value>80</value> </constructor-arg> <!--背景高度--> <constructor-arg index="1"> <value>32</value> </constructor-arg> </bean> <bean id="decoratedPaster" class="com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster"> <!--最大字符长度--> <constructor-arg type="java.lang.Integer" index="0"> <value>4</value> </constructor-arg> <!--最小字符长度--> <constructor-arg type="java.lang.Integer" index="1"> <value>4</value> </constructor-arg> <!--文本颜色--> <constructor-arg index="2"> <ref bean="colorGen" /> </constructor-arg> <!--文本混淆--> <constructor-arg index="3"> <list> <!--<ref bean="baffleDecorator"/>--> </list> </constructor-arg> </bean> <bean id="baffleDecorator" class="com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator"> <constructor-arg type="java.lang.Integer" index="0"> <value>1</value> </constructor-arg> <constructor-arg type="java.awt.Color" index="1"> <ref bean="colorWrite" /> </constructor-arg> </bean> <bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator"> <constructor-arg type="java.awt.Color" index="0"> <ref bean="colorDimGrey" /> </constructor-arg> </bean> <bean id="colorWrite" class="java.awt.Color"> <constructor-arg type="int" index="0"> <value>255</value> </constructor-arg> <constructor-arg type="int" index="1"> <value>255</value> </constructor-arg> <constructor-arg type="int" index="2"> <value>255</value> </constructor-arg> </bean> <bean id="colorDimGrey" class="java.awt.Color"> <constructor-arg type="int" index="0"> <value>105</value> </constructor-arg> <constructor-arg type="int" index="1"> <value>105</value> </constructor-arg> <constructor-arg type="int" index="2"> <value>105</value> </constructor-arg> </bean> </beans>
4. 服务端生成校验码
package personal.hutao.captcha; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.octo.captcha.service.image.ImageCaptchaService; @Controller @RequestMapping("/captcha") public class JcaptchaImageCreater { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private ImageCaptchaService imageCaptchaService; @RequestMapping public void handleRequest(HttpServletRequest request, HttpServletResponse response) { try { ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); String captchaId = request.getSession().getId(); BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId, request.getLocale()); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0L); response.setContentType("image/jpeg"); ImageIO.write(challenge, "jpeg", jpegOutputStream); byte[] captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); ServletOutputStream respOs = response.getOutputStream(); respOs.write(captchaChallengeAsJpeg); respOs.flush(); respOs.close(); } catch (IOException e) { logger.error("generate captcha image error: {}", e.getMessage()); } } }
5. 页面调用
<input type="text" id="captcha" name="captcha" maxlength="4" /> <img src="captcha" onclick="this.src='captcha?d='+new Date().getTime()"/>
如图:
6. 提交登录表单后,校验
package personal.hutao.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.octo.captcha.service.image.ImageCaptchaService; @RequestMapping("/login") @Controller public class LoginController { @Autowired private ImageCaptchaService imageCaptchaService; @RequestMapping(value = "/doLogin", method = RequestMethod.POST) @ResponseBody public Boolean login(String username, String password, String captcha, HttpServletRequest request) { Boolean result = Boolean.FALSE; Boolean isResponseCorrect = imageCaptchaService.validateResponseForID(request.getSession().getId(), captcha); if (isResponseCorrect) { // 继续校验用户名密码等.. } return result; } }
OK,至此就在Spring/SpringMVC环境下实现了Jcaptcha,赶快试试吧~
相关推荐
在企业级开发中,SpringMVC 是一个广泛使用的框架,用于构建高效、模块化和可测试的 Web 应用程序。本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能...
在Spring MVC中,可以创建一个自定义的Bean,该Bean使用Java的`java.security.MessageDigest`类或其他加密库来实现加密功能。 2. **扩展Druid配置**:默认的Druid配置并不直接支持加密的用户名和密码。因此,我们...
在这个例子中,`@Validated`触发了对`User`对象的数据验证,而`BindingResult`参数则用于接收验证结果。如果验证失败,我们可以直接处理错误,无需手动检查每个字段。 除此之外,Spring MVC还支持自定义拦截器(`...
在验证失败的情况下,我们可以检查模型中的错误信息是否正确设置,或者响应状态码和错误消息是否符合预期。 总的来说,Spring MVC的数据验证机制是其强大功能的一个体现,它简化了验证流程,提高了开发效率,增强了...
在 SpringMVC 框架中,我们可以使用 `@NotEmpty` 注解来验证用户输入的数据。 4.2 账号唯一 在注册过程中,我们需要对用户输入的账号进行唯一性验证,以确保账号不重复。在 SpringMVC 框架中,我们可以使用 `@...
在Spring MVC项目中使用Hibernate Validator,首先需要在项目的pom.xml或build.gradle文件中添加对应的依赖。例如,如果是Maven项目,可以在pom.xml中加入以下依赖: ```xml <groupId>org.hibernate ...
这个"springmvc数据验证jar包"正是为了实现这一功能而必备的组件。它包含了多个关键库,如Hibernate Validator、JBoss Logging和Validation API,这些库协同工作以确保输入数据的有效性,从而增强应用程序的安全性和...
在这个"SpringMVC入门很简单之数据验证"的主题中,我们将深入探讨如何在SpringMVC中实现数据验证。 在Web应用中,数据验证是必不可少的一环,它确保了用户提交的数据符合预设的规则和格式,防止非法或无效的数据...
在本例中,我们将讨论如何使用拦截器来实现用户登录验证以及安全退出功能。 首先,我们需要了解SpringMVC中的拦截器是如何工作的。SpringMVC的拦截器是基于Servlet的Filter机制扩展而来的,它通过`...
在本实例中,使用了SpringMVC框架来实现Web应用程序。SpringMVC是一种基于Java的Web应用程序框架,提供了一个灵活的方式来构建Web应用程序。它提供了一个Model-View-Controller(MVC)架构,允许开发者将应用程序...
在这个"springMVC配置连接数据库实现登录功能的小demo"中,我们将探讨如何使用Spring MVC与Hibernate集成来处理用户登录功能。Hibernate是一个流行的ORM(对象关系映射)框架,它简化了与数据库的交互。 首先,我们...
Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...
在本文中,我们将深入探讨如何在SpringMVC框架中实现注解式的权限验证。SpringMVC是Java领域中广泛使用的Web开发框架,它为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入以及丰富的注解支持。...
在SpringMVC 3.0之前,数据校验主要依赖于自定义的验证类。这些验证类通常与实体类相关联,并实现`Validator`接口。 **自定义验证类步骤:** 1. **创建验证类:** 验证类应当位于与实体类相同的包下,并实现`org....
你可以直接在方法签名中使用参数,如 `String name` 来获取请求参数;或者使用 `@RequestParam` 注解指定参数名。对于复杂的数据结构,可以使用 POJO 类绑定请求参数值,SpringMVC 会自动将请求参数填充到对象中。...
使用spring+springmvc框架 整合了Mybatis持久层框架 整合Druid用于数据库连接,并使用Druid对业务层监控spring jdbc 整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 整合FastJson对指定http类型的...
通过以上步骤,我们就可以在Spring应用中成功地整合并使用jCaptcha生成和验证验证码,提高系统的安全性。在实际项目中,可以根据具体需求进一步优化和扩展此功能,例如实现动态加载验证码、多语言支持等。
本篇文章将详细介绍如何在SpringMVC中使用JSR-303进行Bean验证。 首先,我们需要引入JSR-303的实现库。通常使用的是Hibernate Validator,它是JSR-303规范的一个成熟实现。在不使用Maven的情况下,我们需要下载`...
本篇文章将深入探讨如何使用SpringMVC来实现一个简单的登录功能,以及在此过程中涉及的关键知识点。 首先,我们要了解SpringMVC的基本架构。它遵循Model-View-Controller(MVC)设计模式,将业务逻辑、数据展示和...