登入界面及验证码验证

第一篇博客
简便的登入及验证码确认
通过一下代码令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.验证码为口时
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值