使用kaptcha验证码框架(代码方式)
2019-12-30 本文已影响0人
念念碎平安夜
一、编写kaptcha代码
@WebServlet("/newCode5")
public class NewCode5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置属性集
Properties pros = new Properties();
pros.put("kaptcha.border", "no");
pros.put("kaptcha.textproducer.font.color", "red");
pros.put("kaptcha.image.width", "80");
pros.put("kaptcha.image.height", "30");
pros.put("kaptcha.textproducer.char.string", "0123456789");
pros.put("kaptcha.textproducer.char.length", "4");
pros.put("kaptcha.textproducer.char.space", "5");
pros.put("kaptcha.textproducer.font.size", "24");
pros.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
pros.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
Config config = new Config(pros);
// 创建kaptcha对象
DefaultKaptcha kaptcha = new DefaultKaptcha();
kaptcha.setConfig(config);
// 生成验证码并保存到Session
String code = kaptcha.createText();
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
// 生成图片
BufferedImage img = kaptcha.createImage(code);
// 返回图片
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(img, "png", sos);
sos.flush();
sos.close();
}
}
二、编写验证类
@WebServlet("/valiCode5")
public class ValiCode5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String valiCode = request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY)
.toString().toLowerCase();
String inCode = request.getParameter("inCode").toLowerCase();
if (inCode.equals(valiCode)) {
response.sendRedirect("index.jsp");
} else {
request.getSession().setAttribute("err", "验证码输入错误!");
String url = request.getHeader("Referer");
response.sendRedirect(url);
}
}
}
三、前台页面调用并验证
<style type="text/css">
.code_a {
color: #0000ff;
font-size: 12px;
text-decoration: none;
cursor: pointer;
}
#imgCode {
cursor: pointer;
}
</style>
<script type="text/javascript">
function changeCode() {
var imgCode = document.getElementById("imgCode");
imgCode.src = "newCode5?" + Math.random();
}
</script>
</head>
<body>
<form action="valiCode5" method="post">
<label>验证码:</label> <input type="text" id="inCode" name="inCode" /> <img
alt="" src="newCode5" align="center" id="imgCode"
onclick="changeCode()"> <a class="code_a"
onclick="changeCode()">换一张</a><br /> <input type="submit" value="登录" />
</form>
<div style="color: red;">${err}</div>
</body>