页面验证码 JAVA GUI
登录JSP
<%--
Created by IntelliJ IDEA.
User: QuietHR
Date: 2018/8/17
Time: 23:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<script type="text/javascript">
function changeImg(img) {
img.src="/jsp/checkcodeServlet?r=" + Math.random();
}
</script>
</head>
<body>
<form action="/jsp/loginServlet" method="post">
用户名<input type="text" name="username"><br/><br/>
密 码 <input type="password" name="password"><br/>
验证码 <input type="text" name="code_name">
<img src="/jsp/checkcodeServlet" onclick="changeImg(this)"><br/><br/>
<input type="submit" value="登录">
${message == null ? "" : message}
</form>
</body>
</html>
验证码类
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
public class CheckcodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
int width = 120;
int height = 40;
// 1 生成画布 类似于画纸
BufferedImage bufi = new BufferedImage(width , height, BufferedImage.TYPE_INT_RGB);
// 3 获取画笔
Graphics g = bufi.getGraphics();
// 4 填充背景色
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
// 5 绘制边框
g.setColor(Color.red);
g.drawRect(0, 0, width-1, height-1);
// 6 填写随机字符
// 6.1 准备数据
String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
// 6.2 准备随机对象
Random r = new Random();
// 6.3 绘制4个字符
String code="";
for(int i=0; i<4; i++) {
// 6.3.2 设置字体
g.setFont(new Font("楷体", Font.BOLD, 30));
// 6.3.3 设置随机颜色
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
// 6.3.1 绘制字符
String str = data.charAt(r.nextInt(data.length())) + "";
g.drawString(str, 10 + i*28, 30);
code+=str;
}
Cookie cookie= new Cookie("code",code);
cookie.setMaxAge(60);
response.addCookie(cookie);
// 7 绘制干扰线
for(int i=0;i<5;i++) {
// 7.1 设置随机颜色
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
// 7.2 绘制干扰线
g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
}
// 2 将画纸输出到浏览器
ImageIO.write(bufi, "jpg", response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
登录类
import com.hrh.domain.User;
import com.hrh.service.UserService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//System.out.println("LoginServlet");
response.setContentType("text/html;charset=utf-8");
String code_name = request.getParameter("code_name");
String code="";
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("code")) {
code = cookie.getValue();
cookie.setMaxAge(0);
}
}
if(!code.equalsIgnoreCase(code_name)){
request.setAttribute("message","<font color='red'>验证码错误<font/>");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
Map<String, String[]> parameterMap = request.getParameterMap();
User user=new User();
try {
BeanUtils.populate(user,parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService userService = new UserService();
boolean flag=userService.isLogin(user);
if(flag){
response.sendRedirect("/jsp/index.jsp");
}else{
request.setAttribute("message","<font color='red'>账号或密码错误<font/>");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
}