java用户登录_JavaWeb用户登录功能的实现

package zh.userlogin.sample;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

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.io.OutputStream;

import java.util.Random;

/**

* Created by zhang on 2014/9/13.

*/

public class ValidationCode extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//获得验证码集合的长度

int charsLength = codeChars.length();

//下面3条记录是关闭客户端浏览器的缓冲区

//这3条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这3条语句的支持也不同

//因此,为了保险起见,同时使用这3条语句来关闭浏览器的缓冲区

resp.setHeader("ragma", "No-cache");

resp.setHeader("Cache-Control", "no-cache");

resp.setDateHeader("Expires", 0);

//设置图形验证码的长和宽

int width = 90, height = 30;

BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics(); //获得用于输出文字的Graphics对象

Random random = new Random();

g.setColor(getRandomColor(180, 250));

g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.ITALIC,height));

g.setColor(getRandomColor(120, 180));

//用户保存最后随机生成的验证码

StringBuilder validationCode = new StringBuilder();

//验证码的随机字体

String[] fontNames = {"Times New Roman","Book antiqua","Arial"};

//随机生成4个验证码

for(int i = 0; i < 4; i++){

//随机设置当前验证码的字符的字体

g.setFont(new Font(fontNames[random.nextInt(3)],Font.ITALIC,height));

//随机获得当前验证码的字符

char codeChar = codeChars.charAt(random.nextInt(charsLength));

validationCode.append(codeChar);

//随机设置当前验证码字符的颜色

g.setColor(getRandomColor(10, 100));

//在图形上输出验证码字符,x和y都是随机生成的

g.drawString(String.valueOf(codeChar), 16*i + random.nextInt(7), height-random.nextInt(6));

}

//获得HttpSession对象

HttpSession session = req.getSession();

//设置session对象5分钟失效

session.setMaxInactiveInterval(5*60);

//将验证码保存在session对象中,key为validation_code

session.setAttribute("validation_code", validationCode.toString());

//关闭Graphics对象

g.dispose();

OutputStream outS = resp.getOutputStream();

ImageIO.write(image, "JPEG", outS);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req,resp);

}

//图形验证码的字符集,系统将随机从这个字符串中选择一些字符作为验证码

private static String codeChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

//返回一个随机颜色

private static Color getRandomColor(int minColor, int maxColor){

Random random = new Random();

if(minColor > 255){

minColor = 255;

}

if(maxColor > 255){

maxColor = 255;

}

//获得r的随机颜色值

int red = minColor + random.nextInt(maxColor-minColor);

//g

int green = minColor + random.nextInt(maxColor-minColor);

//b

int blue = minColor + random.nextInt(maxColor-minColor);

return new Color(red,green,blue);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值