使用IntelliJ IDEA软件编写简单的图片登陆验证
1、图形验证码的主要目的是为了增强的安全性,增加用户通过遍历所有可能性来增加破解密码的难度。
2、可以根据各种随机数生成策略来生成,并且可以设置随机码有哪些字符组成。
package cn.edu.mju.project1.util;
import java.util.Random;
public class StrUitl {
/**
* 随机生成多个字符的字符串
* count:字符串中字符的个数
* return:生成的字符串
*/
public static String randString(int count){
StringBuilder builder = new StringBuilder();
String str = "abcdefghijklmnpqrstuvwxy0123456789"; //验证码字符集,可以随即拓展
//循环去的字符,并绘制
for(int i=0; i<count; i++) {
Random rnd = new Random(); //定义一个生成生成随机的对象
int pos = rnd.nextInt(str.length()); //取随机字符索引
String s = str.substring(pos, pos + 1); //截取pos到位置的字符串
builder.append(s); //把获取的字符存到StringBuilder内
}
return builder.toString(); //返回输出字符串
}
}
3、控制字符的颜色、字体及大小、验证码字符的个数
g.setColor(Color.RED); //控制验证码的颜色
g.setFont(new Font("宋体", Font.BOLD + Font.ITALIC, FONT_SIZE)); // 设置字体大小
String code = StrUitl.randString(4); //控制验证码字符个数
4、将获取到的验证码保存到Session中用于用户输入验证。
//将验证码保存到Session中
HttpSession session =req.getSession();
session.setAttribute("code",code);
5、设置干扰(线、圆点)和验证码边框。
//设置验证码边框。
g.setColor(Color.BLACK);
g.drawRect(0, 0, WIDTH-1,HEIGHT-1);
//设置干扰线
Random ran = new Random();
for(int i=0 ;i<LINES;i++) {
g.setColor(Color.BLUE); //设置干扰线颜色
g.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT), //获取干扰范围
ran.nextInt(WIDTH), ran.nextInt(HEIGHT));
}
//设置小圆圈干扰
for(int j=0;j<LINES;j++){
g.drawOval(</