`

struts2 jcaptcha

阅读更多

servlet 代码:

package com.radicasys.signup.jcaptcha;



import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.IOException;



import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;



import com.octo.captcha.service.CaptchaServiceException;

import com.octo.captcha.service.image.ImageCaptchaService;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;



public class ImageCaptchaServlet extends HttpServlet {

	private static final long serialVersionUID = 3258417209566116145L;



	private Log logger = LogFactory.getLog(this.getClass());



	public void init(ServletConfig servletConfig) throws ServletException {

		super.init(servletConfig);

	}



	protected void doGet(HttpServletRequest httpServletRequest,

			HttpServletResponse httpServletResponse) throws ServletException,

			IOException {

		byte[] captchaChallengeAsJpeg = null;

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

		ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();

		try {

			// get the image captcha service defined via the 

			//SpringFramework 

			ApplicationContext ctx = WebApplicationContextUtils

					.getRequiredWebApplicationContext(getServletContext());

			Object bean = ctx.getBean("jcaptchaService");

			ImageCaptchaService imageCaptchaService = (ImageCaptchaService) bean;



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

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

			String captchaId = httpServletRequest.getParameter("captchaId");

			logger.debug("captchaIdParameter: "

					+ httpServletRequest.getParameter("captchaId"));

			if (captchaId == null) {

				// If a captcha id is not passed in, use the session id 

				captchaId = httpServletRequest.getSession().getId();

				logger.debug("httpServletRequest.session.id: "

						+ httpServletRequest.getSession().getId());

			}



			logger.debug("captchaId: " + captchaId);

			// call the ImageCaptchaService getChallenge method 

			BufferedImage challenge = imageCaptchaService

					.getImageChallengeForID(captchaId,



					httpServletRequest.getLocale());



			// a jpeg encoder 

			JPEGImageEncoder jpegEncoder = JPEGCodec

					.createJPEGEncoder(jpegOutputStream);

			jpegEncoder.encode(challenge);

		} catch (IllegalArgumentException e) {

			httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);

			return;

		} catch (CaptchaServiceException e) {

			httpServletResponse

					.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

			return;

		}



		captchaChallengeAsJpeg = jpegOutputStream.toByteArray();



		// flush it in the response 

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

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

		httpServletResponse.setDateHeader("Expires", 0);

		httpServletResponse.setContentType("image/jpeg");

		ServletOutputStream responseOutputStream = httpServletResponse

				.getOutputStream();

		responseOutputStream.write(captchaChallengeAsJpeg);

		responseOutputStream.flush();

		responseOutputStream.close();

	}

}

 web.xml加入:

<servlet>
		<servlet-name>jcaptcha</servlet-name>
		<servlet-class>
			com.radicasys.signup.jcaptcha.ImageCaptchaServlet
		</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jcaptcha</servlet-name>
		<url-pattern>/user/jcaptcha</url-pattern>
	</servlet-mapping>
 

jsp页面代码如下:

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">
 
<script language="javascript" type="text/javascript">
			function changeImage() {	
				document.getElementById('kaptchaImage').src = 'jcaptcha?captchaId=' + Math.random();
			}
		</script>
 
<tr>
			<th nowrap="nowrap"><fmt:message key="rememberPassword.code"/></th>
			<td>
			<s:url value="./jcaptcha" id="jcaptcha">
				<s:param name="captchaId" value="captchaId"/>
			</s:url>
			<img src="<s:property value="#jcaptcha"/>" width="130" id="kaptchaImage"
				name="photo" onclick="changeImage();"></td>
		</tr>
		<tr>
			<th></th>
			<td><a href="javascript:changeImage();" title="<fmt:message key="user.jcaptcha.see"/>"
				tabindex="-2" style="color: gray; width: 130px"><fmt:message key="user.jcaptcha.see"></fmt:message></a></td>


		</tr>
		<tr>
			<th></th>
			<td valign="top"><fmt:message key="user.validateCode"></fmt:message> <input type="text"
				name="jcaptchaResponse



" value=''></td>
		</tr>
		<tr>
			<td colspan="2"><s:submit value="%{getText('button.next')}" /></td>
		</tr>

 struts2 action中的代码:

private String jcaptchaResponse;
//set get method......
public boolean checkJcaptcha() {
		boolean flag = false;
		String id = getRequest().getSession().getId();
		if (StringUtils.isNotBlank(jcaptchaResponse)) {
			flag = imageCaptchaService.validateResponseForID(id,
					jcaptchaResponse);
		}
		return flag;
	}	
 
分享到:
评论
1 楼 osacar 2010-08-17  
测试了一下,不成功呢。郁闷啊。。。。找了半天了。

相关推荐

    基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip

    基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts...

    JCaptcha4Struts2快速使用指南

    【JCaptcha4Struts2快速使用指南】 JCaptcha4Struts2 是一个专门为Struts2框架集成JCaptcha验证码服务的插件。JCaptcha本身是一种强大的、可自定义的图像验证码库,旨在防止自动机器人和恶意软件对网站进行非法操作...

    Struts验证码插件 JCaptcha4Struts2

    Struts验证码插件JCaptcha4Struts2是一个用于增强Web应用程序安全性的工具,它整合了Jcaptcha库,为Struts2框架提供了强大的验证码功能。在Web应用中,验证码是一种防止恶意自动化程序(如机器人)进行非法操作的...

    jcaptcha4struts2:从 code.google.compjcaptcha4struts2 自动导出

    jcaptcha4struts2 从 code.google.com/p/jcaptcha4struts2 自动导出 JCaptcha4Struts2 快速入门指南 ##1。 安装 安装和配置 JCaptcha4Struts2 很简单。 从下载插件的最新版本将 JAR 文件包含在您的 Struts2 应用程序...

    jcaptcha4struts2-demo-2.0.1.zip_DEMO_JCaptcha4Struts2.jar_jcaptc

    《Struts2环境下的Jcaptcha4Struts2验证码组件详解》 在Web开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如机器人填写表单或进行非法操作。Struts2作为Java Web开发中广泛应用的MVC框架,与...

    基于java的Struts验证码插件 JCaptcha4Struts2.zip

    Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动化的机器人或恶意软件通过表单提交进行欺诈性操作。在Web开发中,验证码(CAPTCHA)是一种常用的方法,用于区分人类用户和计算机...

    基于Java的实例源码-Struts验证码插件 JCaptcha4Struts2.zip

    Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动机器人或恶意用户通过自动化脚本进行非法操作,如批量注册、恶意登录等。这个插件结合了Struts2框架和JCaptcha库,为Struts2应用...

    java资源Struts验证码插件JCaptcha4Struts2

    java资源Struts验证码插件 JCaptcha4Struts2提取方式是百度网盘分享地址

    基于Java的Struts验证码插件 JCaptcha4Struts2.zip

    `JCaptcha4Struts2`是一个专为Struts2设计的验证码插件,它允许开发者轻松集成验证码功能到他们的应用中。 首先,`JCaptcha4Struts2`依赖于`JCaptcha`库,这是一个Java实现的开源验证码生成器。`JCaptcha`提供了一...

    java源码:Struts验证码插件 JCaptcha4Struts2.rar

    5. **示例应用**:如果提供的压缩包包含一个完整的示例应用,那么你可以直接运行这个应用,了解如何在实际项目中使用JCaptcha4Struts2插件。这可能包括Web应用的部署描述符(如`web.xml`),以及必要的Maven或Gradle...

    基于Java的实例开发源码-Struts验证码插件 JCaptcha4Struts2.zip

    Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用程序的安全组件,旨在防止自动机器人或恶意用户通过表单提交不合法数据。该插件基于Java的开源项目JCaptcha(Just Another CAPTCHA)构建,提供了可视化挑战...

    jcaptcha4struts2-2.0.1

    jcaptcha4struts2-2.0.1,jcaptcha4struts2-2.0.1的jar包

    Struts验证码插件 JCaptcha4Struts2.7z

    Struts验证码插件 JCaptcha4Struts2.7z

    小程序 Struts验证码插件 JCaptcha4Struts2(源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    基于Struts2在线考试系统

    **基于Struts2在线考试系统**是一个典型的JavaEE应用程序,主要使用了Struts2作为MVC框架,结合MySQL数据库存储数据,以及JSP用于展示页面。这个系统实现了验证码登录功能,确保用户验证身份的安全性,同时具备题目...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JCaptcha

    2. **开源项目**:JCaptcha是基于Apache License 2.0开源协议的,这意味着任何人都可以免费使用、修改和分发代码,这对于开发者来说具有很高的灵活性和可扩展性。 3. **Java实现**:JCaptcha是用Java语言开发的,...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics