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" οnclick="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;
	}	
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值