下面是“springMVC实现图形验证码(kaptcha)代码实例”的完整攻略。
1. 环境准备
首先需要准备以下环境:
- Java 7 或以上版本
- Maven 3 或以上版本
- Spring Framework 4 或以上版本
- kaptcha 2.3.2 或以上版本
2. 添加依赖
在 Maven 中添加以下依赖:
<dependency>
<groupId>com.google.code.kaptcha</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
3. 添加配置
在 Spring 配置文件中添加 kaptcha 配置:
<!-- kaptcha配置 -->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha" >
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<util:properties>
<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">30</prop>
<prop key="kaptcha.session.key">code</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
</util:properties>
</constructor-arg>
</bean>
</property>
</bean>
<!-- 验证码拦截器配置 -->
<bean id="captchaInterceptor" class="com.example.interceptor.CaptchaInterceptor">
<property name="captchaProducer" ref="captchaProducer" />
<property name="urlPatterns">
<list>
<value>/verify_code</value>
</list>
</property>
</bean>
4. 编写代码
首先需要编写一个验证码生成的 Controller:
@Controller
public class CaptchaController {
@Autowired
private Producer captchaProducer;
@RequestMapping(value = "/verify_code", method = RequestMethod.GET)
public ModelAndView verifyCode(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
// 生成验证码
String code = captchaProducer.createText();
session.setAttribute("code", code);
// 生成验证码图片
BufferedImage image = captchaProducer.createImage(code);
OutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
return null;
}
}
上述代码的作用是:
- 从 HttpSession 中获取验证码值
- 使用 kaptcha 生成验证码图片
- 把验证码图片输出到 HttpServletResponse 中
接下来需要编写一个拦截器来验证用户输入的验证码是否正确:
public class CaptchaInterceptor extends HandlerInterceptorAdapter {
private Producer captchaProducer;
private List<String> urlPatterns;
public void setCaptchaProducer(Producer captchaProducer) {
this.captchaProducer = captchaProducer;
}
public void setUrlPatterns(List<String> urlPatterns) {
this.urlPatterns = urlPatterns;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断是否需要拦截
if (urlPatterns != null && !urlPatterns.isEmpty()) {
String uri = request.getRequestURI();
for (String pattern : urlPatterns) {
if (UriTemplate.hasParameter(pattern)) {
pattern = UriTemplate.fromTemplate(pattern).expand().getPath();
}
if (uri.endsWith(pattern)) {
// 获取验证码
String code = (String) request.getParameter("code");
HttpSession session = request.getSession();
String sessionCode = (String) session.getAttribute("code");
// 比较验证码
if (code != null && sessionCode != null && code.equalsIgnoreCase(sessionCode)) {
return true;
} else {
// 验证码错误,跳转到错误页面
response.sendRedirect(request.getContextPath() + "/error.html");
return false;
}
}
}
}
return true;
}
}
上述代码的作用是:
- 判断是否需要拦截
- 从 HttpServletRequest 中获取用户输入的验证码
- 从 HttpSession 中获取正确的验证码
- 比较两者是否相同
- 如果一致,则返回 true,否则重定向到错误页面
5. 测试
在前端页面中加入以下 HTML 代码:
<img src="/verify_code" onclick="this.src='/verify_code?x='+Math.random()" />
<br />
<input type="text" id="code" name="code" />
上述代码的作用是:
- 显示验证码图片
- 点击验证码图片可刷新验证码
- 显示一个输入框供用户输入验证码
通过以上步骤,即可在 Spring MVC 中集成 kaptcha 实现图形验证码。同时也可以根据自己的需要进行相应的修改和调整。
示例说明:
- 在上述代码中,我们使用了 kaptcha 默认提供的验证码生成器 DefaultKaptcha。
- 验证码拦截器非常常用,它可以在用户提交表单后及时验证用户输入的验证码是否正确,从而提高网站的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springMVC实现图形验证码(kaptcha)代码实例 - Python技术站