jcaptcha 之 声音验证码

freetts .jar 没有的话 下面有附件下载

/*
 * JCaptcha, the open source java framework for captcha definition and integration
 * Copyright (c)  2007 jcaptcha.net. All Rights Reserved.
 * See the LICENSE.txt file distributed with this package.
 */

package captcha.servlet;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

import captcha.CaptchaServiceSingleton;

import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.sound.SoundCaptchaService;

public class SoundCaptchaServlet extends HttpServlet implements Servlet {
	
	/** 
	 * simple-servlet-image-sample   
	 * @Title: SoundCaptchaServlet.java
	 * @Package captcha.servlet
	 * @Description: TODO
	 * @author liazhou 
	 * @date 2012-1-7 下午05:11:14
	 * @version V1.0   
	 */
	private static final long serialVersionUID = 3440317252067122452L;
	public static SoundCaptchaService service = CaptchaServiceSingleton.getSoundInstance();

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}
	
	@Override
	protected void doPost(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws ServletException,
			IOException {
		// Set to expire far in the past.
		httpServletResponse.setDateHeader("Expires", 0);
		// Set standard HTTP/1.1 no-cache headers.
		httpServletResponse.setHeader("Cache-Control",
				"no-store, no-cache, must-revalidate");
		// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
		httpServletResponse.addHeader("Cache-Control",
				"post-check=0, pre-check=0");
		// Set standard HTTP/1.0 no-cache header.
		httpServletResponse.setHeader("Pragma", "no-cache");

		// return a wav
		httpServletResponse.setContentType("audio/wav");

		AudioInputStream audioInputStream = 
			service.getSoundChallengeForID(httpServletRequest.
					getSession(true).getId());

		ServletOutputStream out = httpServletResponse.getOutputStream();

		// write the data out

		ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
		AudioSystem
				.write(audioInputStream,
						javax.sound.sampled.AudioFileFormat.Type.WAVE,
						byteOutputStream);

		out.write(byteOutputStream.toByteArray());
		try {
			out.flush();
		} finally {
			out.close();
		}
	}

	
	
	
	public  void validateResponse(HttpServletRequest request,
			String userCaptchaResponse) {
		// if no session found
		boolean validated = false;
		if (request.getSession(false) == null)
		// else use service and session id to validate
		try {
			validated = service.validateResponseForID(request.getSession()
					.getId(), userCaptchaResponse);
		} catch (CaptchaServiceException e) {
			// do nothing.. false
		}
		if(validated){
			//success
		}else{
			//error
		}
	}
}




你可能感兴趣的:(验证码)