package sw.util;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
/**
* 验证码
* @author LR
*
*/
public class Captcha {
// 图片的宽度
private int width = 160;
// 图片的高度。
private int height = 40;
// 验证码字符个数
private int codeCount = 4;
// 验证码干扰线数
private int lineCount = 20;
// 验证码
private String code = null;
// 验证码图片Buffer
private BufferedImage image = null;
Random random = new Random();
public Captcha() {
generate();
}
public Captcha(int width, int height) {
this.width = width;
this.height = height;
generate();
}
public Captcha(int width, int height, int codeCount) {
this.width = width;
this.height = height;
this.codeCount = codeCount;
generate();
}
public Captcha(int width, int height, int codeCount, int lineCount) {
this.width = width;
this.height = height;
this.codeCount = codeCount;
this.lineCount = lineCount;
generate();
}
// 生成图片
private void generate() {
int fontWidth = width / codeCount;// 字体的宽度
int fontHeight = height - 5;// 字体的高度
int codeY = height - 8;
// 图像buffer
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//Graphics2D g = buffImg.createGraphics();
// 设置背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
// 设置字体
//Font font1 = getFont(fontHeight);
Font font = new Font("Fixedsys", Font.BOLD, fontHeight);
g.setFont(font);
// 设置干扰线
for (int i = 0; i < lineCount; i++) {
int xs = random.nextInt(width);
int ys = random.nextInt(height);
int xe = xs + random.nextInt(width);
int ye = ys + random.nextInt(height);
g.setColor(getRandColor(1, 255));
g.drawLine(xs, ys, xe, ye);
}
// 添加噪点
float yawpRate = 0.01f;// 噪声率
int area = (int) (yawpRate * width * height);
for (int i = 0; i < area; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
image.setRGB(x, y, random.nextInt(255));
}
String str1 = randomStr(codeCount);// 得到随机字符
this.code = str1;
for (int i = 0; i < codeCount; i++) {
String strRand = str1.substring(i, i + 1);
g.setColor(getRandColor(1, 255));
// g.drawString(a,x,y);
// a为要画出来的东西,x和y表示要画的东西最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处
g.drawString(strRand, i * fontWidth + 3, codeY);
}
}
// 得到随机字符
private String randomStr(int n) {
String str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
String str2 = "";
int len = str1.length() - 1;
double r;
for (int i = 0; i < n; i++) {
r = (Math.random()) * len;
str2 = str2 + str1.charAt((int) r);
}
return str2;
}
// 得到随机颜色
private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
/**
* 产生随机字体
*/
private Font getFont(int size) {
Random random = new Random();
Font font[] = new Font[5];
font[0] = new Font("Ravie", Font.PLAIN, size);
font[1] = new Font("Antique Olive Compact", Font.PLAIN, size);
font[2] = new Font("Fixedsys", Font.PLAIN, size);
font[3] = new Font("Wide Latin", Font.PLAIN, size);
font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, size);
return font[random.nextInt(5)];
}
// 扭曲方法
private void shear(Graphics g, int w1, int h1, Color color) {
shearX(g, w1, h1, color);
shearY(g, w1, h1, color);
}
private void shearX(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(2);
boolean borderGap = true;
int frames = 1;
int phase = random.nextInt(2);
for (int i = 0; i < h1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.copyArea(0, i, w1, 1, (int) d, 0);
if (borderGap) {
g.setColor(color);
g.drawLine((int) d, i, 0, i);
g.drawLine((int) d + w1, i, w1, i);
}
}
}
private void shearY(Graphics g, int w1, int h1, Color color) {
int period = random.nextInt(40) + 10; // 50;
boolean borderGap = true;
int frames = 20;
int phase = 7;
for (int i = 0; i < w1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.copyArea(i, 0, 1, h1, 0, (int) d);
if (borderGap) {
g.setColor(color);
g.drawLine(i, (int) d, i, 0);
g.drawLine(i, (int) d + h1, i, h1);
}
}
}
public void write(OutputStream sos) throws IOException {
ImageIO.write(image, "png", sos);
sos.close();
}
public BufferedImage getImage() {
return image;
}
public String getCode() {
return code.toLowerCase();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
spring boot 实现用户登录认证
共48个文件
class:11个
java:10个
log:8个
需积分: 50 99 下载量 127 浏览量
2017-11-07
18:42:19
上传
评论 2
收藏 1.89MB ZIP 举报
温馨提示
1.架构: spring boot + jpa + thyemleaf, mysql数据库 2.功能实现: 1)使用Logback进行日志记录; 2)使用HandlerInterceptor接口实现登陆认证 3)登陆验证码的生成
资源推荐
资源详情
资源评论
收起资源包目录
sw.zip (48个子文件)
sw
.project 1KB
logs
info.2017-11-04.log 3.31MB
error.2017-11-07.log 124KB
info.2017-11-07.log 2.73MB
error.2017-11-05.log 1.62MB
info.2017-11-06.log 2.7MB
error.2017-11-06.log 4.94MB
info.2017-11-05.log 1.74MB
error.2017-11-04.log 336KB
.springBeans 417B
src
test
java
test
LogTest.java 1KB
main
resources
application.properties 792B
logback-spring.xml 2KB
templates
pages
login.html 1KB
test.html 390B
static
images
java
sw
service
impl
UserServiceImpl.java 616B
IUserService.java 143B
model
UserModel.java 707B
controller
UserController.java 3KB
dao
UserDao.java 1KB
util
Captcha.java 5KB
Application.java 297B
entity
User.java 1KB
interceptor
WebSecurityConfig.java 2KB
target
classes
sw
service
impl
UserServiceImpl.class 1KB
IUserService.class 192B
model
UserModel.class 4KB
controller
UserController.class 5KB
Application.class 664B
dao
UserDao.class 985B
util
Captcha.class 6KB
entity
User.class 2KB
interceptor
WebSecurityConfig.class 2KB
WebSecurityConfig$SecurityInterceptor.class 2KB
application.properties 792B
logback-spring.xml 2KB
templates
pages
login.html 1KB
test.html 390B
grade
static
images
test-classes
test
LogTest.class 1KB
.settings
org.eclipse.wst.common.project.facet.core.xml 170B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 430B
org.eclipse.wst.common.project.facet.core.prefs.xml 172B
org.eclipse.core.resources.prefs 308B
.mvn
wrapper
maven-wrapper.jar 48KB
maven-wrapper.properties 110B
pom.xml 2KB
.classpath 1KB
共 48 条
- 1
资源评论
风中的夏草
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功