生成验证码(存放在session)自己可以改成存放redis
@Controller
public class VerifyController {
@RequestMapping(value
= "/getVerify")
public void getVerify(HttpServletRequest request
, HttpServletResponse response
) {
try {
response
.setContentType("image/jpeg");
response
.setHeader("Pragma", "No-cache");
response
.setHeader("Cache-Control", "no-cache");
response
.setDateHeader("Expire", 0);
RandomValidateCodeUtil randomValidateCode
= new RandomValidateCodeUtil();
randomValidateCode
.getRandcode(request
, response
);
} catch (Exception e
) {
}
}
}
public class RandomValidateCodeUtil {
public static final String RANDOMCODEKEY
= "RANDOMVALIDATECODEKEY";
private String randString
= "0123456789";
private int width
= 95;
private int height
= 25;
private int lineSize
= 40;
private int stringNum
= 4;
private static final Logger logger
= LoggerFactory
.getLogger(RandomValidateCodeUtil
.class);
private Random random
= new Random();
private Font
getFont() {
return new Font("Fixedsys", Font
.CENTER_BASELINE
, 18);
}
private Color
getRandColor(int fc
, int bc
) {
if (fc
> 255)
fc
= 255;
if (bc
> 255)
bc
= 255;
int r
= fc
+ random
.nextInt(bc
- fc
- 16);
int g
= fc
+ random
.nextInt(bc
- fc
- 14);
int b
= fc
+ random
.nextInt(bc
- fc
- 18);
return new Color(r
, g
, b
);
}
public void getRandcode(HttpServletRequest request
, HttpServletResponse response
) {
HttpSession session
= request
.getSession();
BufferedImage image
= new BufferedImage(width
, height
, BufferedImage
.TYPE_INT_BGR
);
Graphics g
= image
.getGraphics();
g
.fillRect(0, 0, width
, height
);
g
.setFont(new Font("Times New Roman", Font
.ROMAN_BASELINE
, 18));
g
.setColor(getRandColor(110, 133));
for (int i
= 0; i
<= lineSize
; i
++) {
drowLine(g
);
}
String randomString
= "";
for (int i
= 1; i
<= stringNum
; i
++) {
randomString
= drowString(g
, randomString
, i
);
}
logger
.info(randomString
);
session
.removeAttribute(RANDOMCODEKEY
);
session
.setAttribute(RANDOMCODEKEY
, randomString
);
g
.dispose();
try {
ImageIO
.write(image
, "JPEG", response
.getOutputStream());
} catch (Exception e
) {
logger
.error("将内存中的图片通过流动形式输出到客户端失败>>>> ", e
);
}
}
private String
drowString(Graphics g
, String randomString
, int i
) {
g
.setFont(getFont());
g
.setColor(new Color(random
.nextInt(101), random
.nextInt(111), random
.nextInt(121)));
String rand
= String
.valueOf(getRandomString(random
.nextInt(randString
.length())));
randomString
+= rand
;
g
.translate(random
.nextInt(3), random
.nextInt(3));
g
.drawString(rand
, 13 * i
, 16);
return randomString
;
}
private void drowLine(Graphics g
) {
int x
= random
.nextInt(width
);
int y
= random
.nextInt(height
);
int xl
= random
.nextInt(13);
int yl
= random
.nextInt(15);
g
.drawLine(x
, y
, x
+ xl
, y
+ yl
);
}
public String
getRandomString(int num
) {
return String
.valueOf(randString
.charAt(num
));
}
public static Boolean
checkVerify(String verifiCode
, HttpSession httpSession
) {
if (StringUtils
.isEmpty(verifiCode
)) {
return false;
}
String random
= (String
) httpSession
.getAttribute("RANDOMVALIDATECODEKEY");
if (StringUtils
.isEmpty(random
)) {
return false;
}
if (!random
.equals(verifiCode
)) {
return false;
}
return true;
}
}