准备开始

首先导入jar包:jcaptcha-my-1.0

/**

* web 常量

* @author lx

*

*/

public abstract class Constants {

/** 用户 session 的 cookie 名称*/

public static final String SESSION_ID = "JSESSIONID";

}

第一步:创建SessionProvider接口

cn.itcast.common.web.session.SessionProvider

public interface SessionProvider {

public void setAttribute(HttpServletRequest request,String name ,Serializable value);

//获取Session中的值

public Serializable getAttribute(HttpServletRequest request,String name);

//退出登陆

public void logout(HttpServletRequest request,HttpServletResponse response);

//获取Session Id

public String getSessionId(HttpServletRequest request);

}

第二步:创建HttpSessionProvider实现类

cn.itcast.common.web.session.HttpSessionProvider

/**

* Session提供类

* @author lx

*

*/

public class HttpSessionProvider implements SessionProvider{

//往Session中设置值

public void setAttribute(HttpServletRequest request,String name ,Serializable value){

HttpSession session = request.getSession();

if(session != null){

session.setAttribute(name, value);

}

}

//获取Session中的值

public Serializable getAttribute(HttpServletRequest request,String name){

HttpSession session = request.getSession(false);

if(session != null){

return (Serializable) session.getAttribute(name);

}else{

return null;

}

}

//退出登陆

public void logout(HttpServletRequest request,HttpServletResponse response){

HttpSession session = request.getSession(false);

if(session != null){

session.invalidate();

}

Cookie c  = new Cookie(Constants.SESSION_ID,null);

c.setMaxAge(0);

response.addCookie(c);

}

//获取Session Id

public String getSessionId(HttpServletRequest request){

return request.getRequestedSessionId();

}

}

第三步:创建classpath:config/utils.xml

<!--   session 提供类  -->

<bean id="sessionProvider"  class="cn.itcast.common.web.session.HttpSessionProvider"/>

第四步:创建JcaptchaServlet

第五步:创建classpth:config/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"/>

<constructor-arg type="int" index="3" value="75000"/>

</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>aabbccddeefgghhkkmnnooppqqsstuuvvwxxyyzz</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>26</value>

</constructor-arg>

<!--最大字体-->

<constructor-arg index="1">

<value>34</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>32</value></constructor-arg>

</bean>

</list>

</constructor-arg>

</bean>

<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator">

<!--背景宽度-->

<constructor-arg index="0">

<value>110</value>

</constructor-arg>

<!--背景高度-->

<constructor-arg index="1">

<value>50</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="colorBlack"/>

</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="colorBlack" class="java.awt.Color">

<constructor-arg type="int" index="0">

<value>50</value>

</constructor-arg>

<constructor-arg type="int" index="1">

<value>50</value>

</constructor-arg>

<constructor-arg type="int" index="2">

<value>50</value>

</constructor-arg>

</bean>

</beans>

第六步:编写JcaptchaServlet

/**

* 提供验证码图片的Servlet

*/

@SuppressWarnings("serial")

public class JcaptchaServlet extends HttpServlet {

public static final String CAPTCHA_IMAGE_FORMAT = "jpeg";

private ImageCaptchaService captchaService;

private SessionProvider session;

@Override

public void init() throws ServletException {

WebApplicationContext appCtx = WebApplicationContextUtils

.getWebApplicationContext(getServletContext());

captchaService = (ImageCaptchaService) BeanFactoryUtils

.beanOfTypeIncludingAncestors(appCtx, ImageCaptchaService.class);

session = (SessionProvider) BeanFactoryUtils

.beanOfTypeIncludingAncestors(appCtx, SessionProvider.class);

}

@Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

byte[] captchaChallengeAsJpeg = null;

// the output stream to render the captcha image as jpeg into

ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();

try {

// get the session id that will identify the generated captcha.

// the same id must be used to validate the response, the session id

// is a good candidate!

String captchaId = session.getSessionId(request);

BufferedImage challenge = captchaService.getImageChallengeForID(

captchaId, request.getLocale());

// Jimi.putImage("image/jpeg", challenge, jpegOutputStream);

ImageIO.write(challenge, CAPTCHA_IMAGE_FORMAT, jpegOutputStream);

} catch (IllegalArgumentException e) {

response.sendError(HttpServletResponse.SC_NOT_FOUND);

return;

} catch (CaptchaServiceException e) {

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

return;

}

// catch (JimiException e) {

// response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

// return;

// }

captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

// flush it in the response

response.setHeader("Cache-Control", "no-store");

response.setHeader("Pragma", "no-cache");

response.setDateHeader("Expires", 0);

response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);

ServletOutputStream responseOutputStream = response.getOutputStream();

responseOutputStream.write(captchaChallengeAsJpeg);

responseOutputStream.flush();

responseOutputStream.close();

}

}

第七步:配置web.xml

<!-- 配置Jcaptcha 验证码-->

<servlet>

<servlet-name>jcaptcha</servlet-name>

<servlet-class>cn.itcast.common.captcha.JcaptchaServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>jcaptcha</servlet-name>

<url-pattern>/captcha.svl</url-pattern>

</servlet-mapping>

第八步:编写登陆页面front_page/buyer/login.jsp

<li>

<label for="captcha">验证码:</label>

<span class="bg_text small">

<input type="text" id="captcha" name="captcha" maxLength="7"/>

</span>

<img src="/captcha.svl" onclick="this.src='/captcha.svl?d='+new Date()" class="code" alt="换一张" /><a href="javascript:void(0);" onclick="$('.code').attr('src','/captcha.svl?d='+new Date())" title="换一张">换一张</a>

</li>

jcaptcha配置验证码的更多相关文章

  1. Confluence 6 为登录失败编辑,禁用和配置验证码

    在默认的情况下,验证码将会在失败登录次数达到的时候显示. 如果为登录失败编辑,禁用和配置验证码: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧 ...

  2. Confluence 6 配置验证码(Captcha)来防止垃圾

    如果你的 Confluence 站点是对公众开放的(允许匿名用户使用,添加评论,创建页面等),你可能会发现你的站点会被自动创建很多垃圾页面,评论或者其他垃圾内容. 你可以配置让 Confluence ...

  3. JCaptcha做验证码遇到的问题引出的思考

    JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...

  4. kaptcha验证码使用

    参数配置: Constant 描述 默认值 kaptcha.border 图片边框,合法值:yes , no yes kaptcha.border.color 边框颜色,合法值: r,g,b (and ...

  5. SSH实战 · SSH项目中怎么玩验证码

    大致思路与之前servlet中玩验证码类似,生成随机数,产生干扰线,画到图片上,保存到session中. 本人习惯用的时候专门写一个验证码的action:CheckImgAction. step1: ...

  6. tinkphp验证码的使用

    页面显示验证码: <div class="input-group has-feedback "> <input id="yzm" type=& ...

  7. tinkphp登录验证码的使用

    登录和验证(控制器) <?php namespace Come\Controller; use Think\Controller; class RenController extends Con ...

  8. LUA+resty 搭建验证码服务器

    使用Lua和OpenResty搭建验证码服务器 雨客 2016-04-08 16:38:11 浏览2525 评论0 云数据库Redis版 摘要: Lua下有个Lua-GD图形库,通过简单的Lua语句就 ...

  9. thinkphp验证码的实现

    两种验证码验证实现,一种直接在form表单提交按钮实现验证,一种使用ajax传递参数实现验证: 1.直接在form表单提交按钮实现验证,在控制器VerifyController.class.php中写 ...

随机推荐

  1. 第五课:PHP echo和print 语句

    PHP  echo 和 print 语句 PHP 是通过 print 和 echo 语句来动态输出 HTML 内容,虽然 print 和 echo 语句两者的功能几乎是完全一样,但是还是有一点差别的. ...

  2. hadoop2.7.2集群搭建

    hadoop2.7.2集群搭建 1.修改hadoop中的配置文件 进入/usr/local/src/hadoop-2.7.2/etc/hadoop目录,修改hadoop-env.sh,core-sit ...

  3. 第一次学习tornado小练习

    内容 这次是python的一个web框架,tornado,这个web框架在python的几个web框架中一个比较简单的web框架,刚开始接触python的时候就知道python有两个比较常用的web框 ...

  4. 新手学习ARM,对片内ram、SDRAM、NOR FLASH和NAND FLASH启动这几个概念的理解

    片内的ram用来存储启动代码,在2440初始化sdram之前,代码就在片内ram中运行.片内ram装载的是norflash中的内容,即u-boot. uboot放在norflash里,nandflas ...

  5. nyoj 525 一道水题【字符串(分割)】

    参考:https://blog.csdn.net/dxx_111/article/details/48154687 #include <iostream> #include <cst ...

  6. HDU暑假多校第三场H.Monster Hunter

    一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...

  7. 理解Canvas像素边界

    大家看下面的例子 var context = document.getElementById('canvas').getContext('2d'); context.lineWidth = 1; co ...

  8. intellij idea之git执行打标签(tag)和删除标签

    intellij idea 版本为2017.2.6 进入Version Control-->log 1.在之前版本中,右键,新建标签 2.输入标签名称,建议输入版本号的方式 3.push标签 由 ...

  9. Python爬虫之JS异步加载

    一.判断异步加载方式(常用的JS库) 1. jQuery(70%) # 搜索 jquery 茅塞顿开 <script src="http://ajax.googleapis.com/a ...

  10. java反射操作类方法与属性

    package com.fanshe.test; public class User { private int age; private String email; private String u ...