第一篇博客
简便的登入及验证码确认
通过一下代码令Captche的验证码显示在login中
login类
package cn.edu.mju.project2438.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(“login”)
public class LoginController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
StringBuilder StringBuilder=new StringBuilder();
StringBuilder.append("");
StringBuilder.append(“登入名称:<input type=‘text’name=‘loginName’ value=’’>
”);
StringBuilder.append(“登入密码:
”);
StringBuilder.append(“验证证码:
“);
StringBuilder.append(””);
StringBuilder.append("");
StringBuilder.append("");
showMsg(response,StringBuilder.toString());
}
protected void doPost( HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String loginName = req.getParameter("loginName");
String loginPwd = req.getParameter("loginPwd");
String validCode=req.getParameter("validCode");
String code=(String)req.getSession().getAttribute("code");
String msg=null;
if(validCode==null || "".equals(validCode))
{
msg="请输入验证码";
}else {
if(validCode.equals(code)){
if ("3187102423".equals(loginName) && "1234".equals(loginPwd)) {
msg = "Hello" + loginName;
}
else
{
msg = "账号或者密码错误";
}
}
else
{
msg ="验证码错误";
}
}
showMsg(resp, msg);
}
private void showMsg( HttpServletResponse response,String msg) throws IOException {
response.setCharacterEncoding("UTF-8");
StringBuilder StringBuilder=new StringBuilder();
StringBuilder.append("<html>");
StringBuilder.append("<header>");
StringBuilder.append("<title>test</title>");
StringBuilder.append("<meta http-equiv=\"content-type\"content=\"text/html;charset=utf-8\">");
StringBuilder.append("</header>");
StringBuilder.append("<body>");
StringBuilder.append(msg);
StringBuilder.append("</body>");
StringBuilder.append("</html>");
PrintWriter out =response.getWriter();
out.println(StringBuilder.toString());
out.close();
}
}
Capthe类
package cn.edu.mju.project2438.controller;
import cn.edu.mju.project2438.controller.entity.service.util.StrUtil;
import org.w3c.dom.css.RGBColor;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.sql.Struct;
import java.util.Random;
@WebServlet("/captche")
public class CaptcheController extends HttpServlet{
private final int Width=100;
private final int Height=100;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//生成图片
ServletOutputStream sos=resp.getOutputStream();
String str= StrUtil.rndString(4);
HttpSession session=req.getSession();
session.setAttribute(“code”,str);
ImageIO.write(generatePic(Width,Height,str),“JPEG”,sos);//白幕大小
//StrUtill.isBlank(“aaa”);
sos.flush();
sos.close();
}
private BufferedImage generatePic(int width ,int height,String str){
BufferedImage image=new BufferedImage(100,100,BufferedImage.TYPE_INT_BGR);//创建一个不带透明色的图像
Graphics g=image.getGraphics(); // Graphics 几何绘图
g.setColor(Color.WHITE);//图形颜色
g.fillRect(0,0,width,height); //图形于黑幕内的位置
g.setFont(new Font("宋体",Font.BOLD,20));//字体
Random rnd =new Random();
//g.setColor(Color.BLACK);
Color col=new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
g.setColor(col);
//g.drawString(str,20,20);//由左下定位,设定位置
/*int base=Width/str.length();
for(int i=0;i<str.length();i++)//随机位置
{
String s=str.substring(i,i++);
int x=i*base+rnd.nextInt(base);
int y=20+rnd.nextInt(Height-20);
g.drawString(s,x,y);
}*/
int base=Width / str.length();
for (int i=0;i<str.length();i++)
{
String s=str.substring(i,i+1);
int x=i*base+rnd.nextInt(base-20);
int y=20+rnd.nextInt(Height-20);
g.drawString(s,x,y);
}
int num = rnd.nextInt(10);
for (int i = 0; i < num; i++) //生成随机线
{
int y = rnd.nextInt(100);
int x = rnd.nextInt(100);
int x1 = rnd.nextInt(100);
int y1 = rnd.nextInt(100);
Color col1=new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
g.setColor(col1);
g.drawLine(x,y,x1,y1);
}
for (int i = 0; i < 200; i++)
{
/*int x = rnd.nextInt(100);
int y = rnd.nextInt(100);
int z=rnd.nextInt(256);
image.setRGB(x,y,z);*/
rndPoint(g);
}
return image;
}
private void rndPoint(Graphics g){
Random rnd =new Random();
Color color=new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256));
g.setColor(color);
int x=rnd.nextInt(Width);
int y=rnd.nextInt(Height);
g.drawLine(x,y,x,y);
}
}
StrUtil类
package cn.edu.mju.project2438.controller.entity.service.util;
import java.util.Random;
public class StrUtil {
public static String rndString(int count) {
StringBuilder builder = new StringBuilder();
String source = "abcdefghijklmnopqrstuvwxyz0123456789";
Random rnd = new Random();//定义随机数
for (int i = 0; i < count; i++) {
int pos = rnd.nextInt(source.length());
String s = source.substring(pos, pos + 1);
builder.append(s);
}
return builder.toString();
}
public static boolean isBlank(String str)
{
if(str==null || "".equals(str))
{
return true;
}else{
return false;
}
}
}
效果展示
1.正常的登入
2.验证码错误时
3.正确的登入
4.验证码为口时