实现登录验证有哪些方式?

方式一:基于WebFilter过滤器和Session存取登录信息

流程:1、登录成功后,把用户信息存入Session;2、下次同一个会话获取Session里面的值,如果为空,表明为未登录,不能访问主页面,否则可以;3、通过过滤器来实现登录页面的跳转;4、配置拦截请求URL可以通过注解和XML配置。

参考视频


方式二:登录、注册、短信验证

过程:1、发送一个电话号码到后端;2、后端随机生成一个验证码放入Redis中;3、调用短信接口(用的阿里云的,可免费用三个月)发送到用户手机;4、逻辑参考发送短信工具类SendSMSUtil;5、发送手机验证码和校验验证码参考控制层SmsCtroller。

//阿里云短息验证码依赖
  <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>4.4.0</version>
  </dependency>
  <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
      <version>1.0.0</version>
  </dependency>

源码解析

参考文章

参考视频


方式三:登录、注册、邮箱验证

过程:1、相比于短信验证不要钱;2、在QQ邮箱设置配置(设置->账户->开启服务->点击生成授权码->yml里面写上授权码);3、源码实现单人、多人邮件发送,以及邮件带附件

<!--邮箱依赖-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

源码解析

参考视频


方式四:登录、注册、图片验证

作用:同短信、邮件验证雷同,防止大量的表单提交,为后台服务器以及数据库减轻负担 ;换种说法就是:有验证的地方就一定有表单的提交,为了防止不友好的提交,比如疯狂提交,遭遇黑客,我们知道提交表单就需要写数据到数据库,此时数据库就会短时间内执行大量写入,当数据库执行不过来就会造成数据库崩溃。

过程:1、生成图片验证码(采用Java自带的AWT技术,即抽象窗体工具集_Abstract Windows Tookit,它是最早的Sun提供的GUI库图形用户界面;实现:弄一张图片,上面加上我们生成的验证码)

//通过Java代码生成图片验证码
public class ImageCode {
	
	//数组——提供验证码数据
	static String[] strings = {"a","b","c","d","e","f","g","h","i","j","k","l",
								"m","n","o","p","q","r","s","t","u","v","w","x","y","z",
									"1","2","3","4","5","6","7","8","9"};

	public static void main(String[] args) throws Exception {
		//需求:通过Java代码生成图片(图片上含有数字、字母、干扰线)
		//
		/**
		 * 我们把生成图片验证码比如成画画,可分为下面几个步骤
		 * 1、画板
		 * 2、笔
		 * 3、数据(strings数组随机取出4个数)
		 * 4、通过 笔 把 数据 画到 画板
		 * 5、生成 图片验证码
		 */
		
		
		//1、画板(JDK提供了一个画板类:BufferedImage)
		/**
		 * width, 图片宽度
		 * height, 图片高度
		 * imageType 图片类型
		 */
		BufferedImage image = new BufferedImage(150, 50, BufferedImage.TYPE_INT_RGB);
		
		//2、笔(画笔对象:Graphics)
		Graphics g = image.getGraphics();
		/**设置画笔颜色*/
		g.setColor(Color.cyan);
		/**
		 * 画填充矩形,来更改图片颜色
		 * x, 相对于画板位置
		 * y, 
		 * width, 填充高度
		 * height 填充宽度
		 */
		g.fillRect(0, 0, 150, 50);
		
		//3、数据(随机娶四个从数组strings)_
			//补充:设置数据显示颜色采用RGB:g.setColor(new Color(r, g, b));
			//设置数据显示角度:需要旋转,网上查
		g.setColor(Color.RED);
		g.setFont(new Font("宋体",Font.BOLD, 35));
 
		for (int i = 0; i < 4; i++) {
			/**new Random().nextInt(strings.length)_用于生成指定数字里面的随机数*/
String s = strings[new Random().nextInt(strings.length)];
			/**
			 * 4\每获取一个数据写在画板上
			 * iterator, 数据
			 * x, 
			 * y 画板上相对位置
			 */
			g.drawString(s, 20+i*30, 35);
		}
		
		//画干扰线
		/**
		 * x1, y1, x2, y2 两个坐标,两个点。确定一条线
		 */
		g.setColor(Color.black);
		for (int i = 0; i < 3; i++) {
			g.drawLine(10, 10+i*10, 140, 15+i*10);
		}
		
		//5、生成 图片验证码(把image生成本地磁盘上:ImageIO)
		/**
		 * im, 画板
		 * formatName, 图片后缀名
		 *  output 指定本地的输出路径
		 */
		ImageIO.write(image, "jpg", new File("G:\\server\\picture\\aaa.jpg"));
	}
}

通过此代码生成的图形验证码结果

参考视频

滑动验证码教程


文章作者: LJH
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LJH !
  目录