springboot——kaptcha

导入包:

		<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>

配置类:

package com.now.community.community.config;import com.google.code.kaptcha.Producer;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;@Configuration
public class KaptchaConfig {@Beanpublic Producer kaptchaProducer() {Properties properties = new Properties();properties.setProperty("kaptcha.image.width", "100");properties.setProperty("kaptcha.image.height", "40");properties.setProperty("kaptcha.textproducer.font.size", "32");properties.setProperty("kaptcha.textproducer.font.color", "0,0,0");properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");properties.setProperty("kaptcha.textproducer.char.length", "4");properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");DefaultKaptcha kaptcha = new DefaultKaptcha();Config config = new Config(properties);kaptcha.setConfig(config);return kaptcha;}}
Controller
    //验证码@RequestMapping(path = "/kaptcha", method = RequestMethod.GET)public void getKaptcha(HttpServletResponse response/*, HttpSession session*/) {// 生成验证码String text = kaptchaProducer.createText();BufferedImage image = kaptchaProducer.createImage(text);//将验证码存入sessionsession.setAttribute("kaptcha", text);// 将图片输出给浏览器response.setContentType("image/png");try {OutputStream os = response.getOutputStream();ImageIO.write(image, "png", os);} catch (IOException e) {logger.error("响应验证码失败:" + e.getMessage());}}

html

<img th:src="@{/kaptcha}" id="kaptcha" style="width:100px;height:40px;" class="mr-2"/>
<a href="javascript:refresh_kaptcha();" class="font-size-12 align-bottom">刷新验证码</a>

js:

jq

善意欺骗,随机数,更新。

<script>function refresh_kaptcha() {var path = CONTEXT_PATH + "/kaptcha?p=" + Math.random();$("#kaptcha").attr("src", path);}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP复习资料(7)-机器翻译、文本分类、情感分析

NLP复习资料国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。此部分为手稿&#xff0c;高清图下载见链接&#xff1a;https://download.csdn.net/download/sinat_40624829/11662412

XMl文件解析读取

DOM方式&#xff1a; http://www.w3schools.com/dom/dom_parser.asp

redis——对项目的一些优化方案

这是我们之前项目的业务流程&#xff0c;做一下简单介绍。 登录&#xff1a; 用户输入账号、密码、验证码。我们先判断用户输入的验证码是不是我们session存的验证码&#xff0c;然后去查账号密码是否正确。 如果登录成功&#xff0c;发送给用户一张凭证&#xff08;ticket&a…

const的思考

const的思考 1、什么是const?常类型是指使用类型修饰符const说明的类型&#xff0c;常类型的变量或对象的值是不能被更新的。&#xff08;当然&#xff0c;我们可以偷梁换柱进行更新&#xff1a;&#xff09;2、为什么引入const&#xff1f;const 推出的初始目的&#xff0c;正…

深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误的…

NLP复习资料(8)-知识图谱、信息抽取

NLP复习资料第16讲—知识图谱第17讲-信息抽取&#xff08;知识图谱生命周期中信息获取的关键技术&#xff09;国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。第16讲—知识图谱 知识图谱经典知识表示理论语义网资源描述框架…

Collection源码阅读

package java.util;import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport;/*** 集合层次结构的根接口&#xff0c;一个集合表示一组对象&#xff0c;称为元素* JDK不提供任何该接口的直接实现&#xff0c;JDK提供实现…

socket阻塞和非阻塞的区别

读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲 区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读…

深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目录1.摘要和介绍1.1摘要部分2.背景和方法2.1 背景2.2 贡献2.3 方法3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误…

架构分享--微博架构

先来分享下大神Tim Yang的关于微博的架构设计&#xff1a; 这里主要从 存储和接口角度来讲 对于大流量系统的架构设计&#xff0c;对于写入方面是特别需要注意的&#xff0c;基本上现在遇到的系统都是对于主数据库的写入&#xff0c;然后对于从数据库实现流量的分发。 对于存…

Pytorch(7)-自己设计神经网络会遇到的问题

操作pytorch架构遇到的问题1.网络参数初始化2.查看当前可学习参数3.增加可学习的参数4.参数优化函数Adagrad5.直接修改网络梯度值6.optimizers.zero_grad()报错7.tensor.detach() 和 tensor.data 的区别1.网络参数初始化 在pytorch中&#xff0c;有自己默认初始化参数方式&…

Python里的OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话&#xff0c;这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动&#xff0c;也不会发生任何问题&#xff0c;就可以在Linux和Windows下运行。 下面列出了一些在os模块中比较…

深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.1.1 训练过程2.1.2 loss介绍2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望主要贡献&#xff1a;基于网络蒸馏方法&#xff0c;提出了一种提升裁剪后模型的精度的方法&#xff01;将训练时间大…

关系数据库——基础

数据库系统概论 四个基本概念 数据&#xff1a;数据库中存储的基本对象&#xff0c;描述一个事物的符号记录&#xff0c;数据和其语义不可分开说 数据库&#xff08;DB&#xff09;&#xff1a;是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统&a…

Python(27)-模块

模块、包1.模块导入的方式2.使用as给模块取一个别名&#xff08;大驼峰命名法&#xff09;3.从模块中导入部分工具4.从模块中导入全部工具5.模块搜索顺序6__name__7.包8.发布模块、安装模块、卸载包9.pip安装第三方模块本系列博文来自学习《Python基础视频教程》笔记整理&#…

Wow6432Node

64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项。许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然。 64 位版本 Windows 包含的默认 64 位版本注册表编辑器 (Regedit.exe) 可显示 64 位和 32 位的 注册表项。WOW64 注册表重定向器为 32 位程序提供…

如何使用docker配置深度学习开发环境

文章目录1.底层驱动的安装1.1 操作系统的安装1.2 显卡驱动的安装1.3 cuda的安装2.使用docker配置深度学习开发环境2.1 docker的安装2.2 nvidia_docker的安装2.3 安装过程中的问题2.3.1 docker和nvidia_docker的版本不匹配的问题。2.3.2 解决每次运行docker命令的时候要加sudo.2…

反射全解

反射的概念 反射的引入&#xff1a; Object obj new Student(); 若程序运行时接收到外部传入的一个对象&#xff0c;该对象的编译类型是Object&#xff0c;但程序又需要调用该对象运行类型的方法&#xff1a; 1.若编译和运行类型都知道&#xff0c;使用 instanceof判断后&…

MachineLearning(4)-核函数与再生核希尔伯特空间

核函数与再生核希尔伯特空间1.支持向量积-核函数2.一个函数为核函数的条件3.核函数与希尔伯特空间3.1希尔伯特空间-Hilbert空间1.支持向量积-核函数 核(kernel)的概念由Aizenman et al.于1964年引入模式识别领域&#xff0c;原文介绍的是势函数的方法。在那之后&#xff0c;核…

CRegKey 注册表操作

1.简介 CRegKey提供了对系统注册表的操作方法&#xff0c;通过CRegKey类&#xff0c;可以方便的打开注册表的某个分支或子键&#xff08;CRegKey::Open&#xff09;&#xff0c;可以方便的修改一个键的键值&#xff08;CRegKey::SetValue&#xff09;&#xff0c;也可以查询某…