百度网盘demo提取地址:
https://pan.baidu.com/s/1dF81khN
java引用的包
import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService; import com.github.bingoohuang.patchca.filter.FilterFactory; import com.github.bingoohuang.patchca.filter.predefined.CurvesRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.DiffuseRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.DoubleRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.MarbleRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.WobbleRippleFilterFactory; import com.github.bingoohuang.patchca.utils.encoder.EncoderHelper; import com.yjf.easylife.web.security.util.CaptchaFactory;
控制器代码
@Controller @RequestMapping("/security") public class ValidateController { /** * 日志对象 */ protected final Logger logger = LoggerFactory.getLogger(getClass()); private static final long serialVersionUID = 1L; private static ConfigurableCaptchaService cs = CaptchaFactory.getInstance(); private static List<FilterFactory> factories; static { factories = new ArrayList<FilterFactory>(); factories.add(new CurvesRippleFilterFactory(cs.getColorFactory())); factories.add(new MarbleRippleFilterFactory()); factories.add(new DoubleRippleFilterFactory()); factories.add(new WobbleRippleFilterFactory()); factories.add(new DiffuseRippleFilterFactory()); } @RequestMapping("/getImage.htm") public void getImage(HttpServletRequest request, HttpServletResponse response) { try { cs.setFilterFactory(factories.get(new Random().nextInt(5))); setResponseHeaders(response); Session session = SecurityUtils.getSubject().getSession();; String token = EncoderHelper.getChallangeAndWriteImage(cs, "png", response.getOutputStream()); session.setAttribute("EASYLIFE_CAPCHA", token); logger.info("当前的SessionID = " + session.getId() + ", 验证码 = " + token); } catch (IOException e) { e.printStackTrace(); } } private void setResponseHeaders(HttpServletResponse response) { response.setContentType("image/png"); response.setHeader("Cache-Control", "no-cache, no-store"); response.setHeader("Pragma", "no-cache"); long time = System.currentTimeMillis(); response.setDateHeader("Last-Modified", time); response.setDateHeader("Date", time); response.setDateHeader("Expires", time); }
CaptchaFactory实现代码
import com.github.bingoohuang.patchca.color.RandomColorFactory; import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService; import com.github.bingoohuang.patchca.word.RandomWordFactory; public class CaptchaFactory { private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); static { cs.setColorFactory(new RandomColorFactory()); RandomWordFactory wf = new RandomWordFactory(); wf.setCharacters("1234567890"); wf.setMaxLength(4); wf.setMinLength(4); cs.setWordFactory(wf); } public static ConfigurableCaptchaService getInstance() { return cs; } }
html代码
<html> <head></head> <body> <div class="p-new-in"> <span class="p-new-inname">验证码</span> <input type="text" name="customCaptcha" class="p-new-input p-new-w177" placeholder="请输入图片验证码" /> <span class="p-new-code l-mar-r15"> <img src="/security/getImage.htm" class="reloadImage" id="reloadImage" width="121" height="40" /> </span> <a href="javaScript:;" class="l-color9 reloadImage">看不清楚,换一张</a> </div> </body> </html>
js代码
$(".reloadImage").click(function () { //获取当前的时间作为参数,无具体意义 var timenow = new Date().getTime(); $('#reloadImage').attr("src", "/security/getImage.htm?date=" + timenow); });
判断验证码是否正确
/** * * Created by cike-zihao on 2015/11/25 */ package com.yjf.easylife.common.util; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest;
/** * Created by cike-zihao on 2015/11/25. */ public class SecurityCodeUtil { public static boolean whetherImgCaptchaMatch(String customCaptcha, HttpServletRequest request) { boolean captchaMatch = true; String requestCaptcha = (String) request.getSession() .getAttribute("EASYLIFE_CAPCHA"); if (!StringUtils.equals(customCaptcha, requestCaptcha)) { captchaMatch = false; } return captchaMatch; } }