博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
登录界面验证码的实现
阅读量:3946 次
发布时间:2019-05-24

本文共 7175 字,大约阅读时间需要 23 分钟。

文章目录

Javaweb实现验证码

前端

添加样式

FM_blog

编写代码

锋芒博客登录

配置web.xml文件

com.FM.servlet
com.FM.servlet.ValidationCodeServlet
ValidationCodeServlet
com.FM.servlet.ValidationCodeServlet
ValidationCodeServlet
/ValidationCodeServlet

后台

package com.FM.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.imageio.ImageIO;import javax.servlet.http.HttpSession;import java.awt.*;import java.awt.image.BufferedImage;import java.io.OutputStream;import java.util.Random;public class ValidationCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public ValidationCodeServlet() {
super(); } 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); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); } //图形验证码的字符集,系统将随机从这个字符串中选择一些字符作为验证码 private static String codeChars = "123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; //返回一个随机颜色 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); }}

效果图:

在这里插入图片描述

Springboot添加验证码

项目结构

在这里插入图片描述

依赖

com.github.penggle
kaptcha
2.3.2

控制类

CommonController

package com.habse.car_position.Controller;import com.google.code.kaptcha.impl.DefaultKaptcha;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import javax.imageio.ImageIO;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;/*验证码 */@Controllerpublic class CommonController {
@Autowired private DefaultKaptcha captchaProducer; @GetMapping("/common/kaptcha") public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
byte[] captchaOutputStream = null; ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream(); try {
//生产验证码字符串并保存到session中 String verifyCode = captchaProducer.createText(); httpServletRequest.getSession().setAttribute("verifyCode", verifyCode); BufferedImage challenge = captchaProducer.createImage(verifyCode); ImageIO.write(challenge, "jpg", imgOutputStream); } catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } captchaOutputStream = imgOutputStream.toByteArray(); httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaOutputStream); responseOutputStream.flush(); responseOutputStream.close(); }}

KaptchaConfig

package com.habse.car_position.config;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import java.util.Properties;@Componentpublic class KaptchaConfig {
@Bean public DefaultKaptcha getDefaultKaptcha(){
DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); Properties properties = new Properties(); properties.put("kaptcha.border", "no"); properties.put("kaptcha.textproducer.font.color", "blue"); properties.put("kaptcha.image.width", "140"); properties.put("kaptcha.image.height", "40"); properties.put("kaptcha.textproducer.font.size", "30"); properties.put("kaptcha.session.key", "verifyCode"); properties.put("kaptcha.textproducer.char.space", "5"); Config config = new Config(properties); defaultKaptcha.setConfig(config); return defaultKaptcha; }}

前端页面

效果图

在这里插入图片描述

转载地址:http://weawi.baihongyu.com/

你可能感兴趣的文章
net TCP/IP / TIME_WAIT / tcpip / iperf / cain
查看>>
webServer kzserver/1.0.0
查看>>
hd printer lexmark / dazifuyin / dayin / fuyin
查看>>
OS + Unix IBM Aix basic / topas / nmon / filemon / vmstat / iostat / sysstat/sar
查看>>
my ReadMap subway / metro / map / ditie / gaotie / traffic / jiaotong
查看>>
OS + Linux DNS Server Bind
查看>>
linux下安装django
查看>>
Android 解决TextView设置文本和富文本SpannableString自动换行留空白问题
查看>>
最完整的Java IO流学习总结
查看>>
Android开发中Button按钮绑定监听器的方式完全解析
查看>>
解决ScrollView嵌套ListView后,进入页面不从顶部开始
查看>>
Android自定义View实现商品评价星星评分控件
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
postgresql查看表的和索引的情况,判断是否膨胀
查看>>
postgresql中根据oid和filenode去找表的物理文件的位置
查看>>
postgresql减少wal日志生成量的方法
查看>>
linux下mysql 8.0忘记密码后重置密码
查看>>
swift中单例的创建及销毁
查看>>
获取App Store中App的ipa包
查看>>
iOS 关于pods-frameworks.sh:permission denied报错的解决
查看>>