首页 > 其他分享 >005--验证码及应用于登录案例,idea技巧之开启热部署..

005--验证码及应用于登录案例,idea技巧之开启热部署..

时间:2023-07-26 20:35:31浏览次数:60  
标签:-- text idea 验证码 captcha session 005 new out

参考:SpringBoot | 稀客大大 (heyige.cn)

自勉:勤则百病皆消,懒则诸事不顺

1. idea技巧之-定位已经打开的代码,在文件夹中的位置

2. idea技巧之-在idea上改变数据库表

最后别忘记点击OK

3. 验证码使用
依赖
<dependency>
    <groupId>com.github.whvcse</groupId>
    <artifactId>easy-captcha</artifactId>
    <version>1.6.2</version>
</dependency>
参考使用
@GetMapping("/captcha")
public void getCaptcha(HttpServletResponse response) throws IOException {
    ServletOutputStream outputStream = response.getOutputStream();
    // 算术验证码
    // ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(120,40);

    // 中文验证码
    // ChineseCaptcha captcha =new ChineseCaptcha(120, 40);

    // 英文与数字验证码
    // SpecCaptcha captcha = new SpecCaptcha(120, 40);

    // 英文与数字动态验证码
    // GifCaptcha captcha = new GifCaptcha(120, 40);

    // 中文动态验证码
    ChineseGifCaptcha chineseCaptcha = new ChineseGifCaptcha();//直接生成验证码对象;
    chineseCaptcha.setLen(2); //生成的验证码位数
    System.out.println(chineseCaptcha.text()); //控制台打印验证码文本内容
    chineseCaptcha.out(outputStream);//使用输出流生成验证码图片
}
实际使用
@GetMapping("captcha")
    public void captcha(HttpServletResponse response, HttpSession session) throws IOException {
        ServletOutputStream out = response.getOutputStream();//从响应对象获取一个输出流对象;用于输出图片文件

        // ArithmeticCaptcha captcha = new ArithmeticCaptcha();//数字验证码对象
        SpecCaptcha captcha = new SpecCaptcha();//生成一个验证码对象
        // captcha.setLen(3);
        String text = captcha.text();//提取验证码文本内容
        session.setAttribute("captcha", text);//将验证码的值存放在session中
        System.out.println("获取的验证码文字是:" + text);//打印验证码的文字内容
        captcha.out(out);//使用响应对象的输出流输出到前端
    }
改变验证码尺寸
SpecCaptcha captcha = new SpecCaptcha(400,50);

4. idea开启热部署注:只有开启debug功能才能进行热部署,直接启动项目不会热部署

5. 验证码应用案例,登录使用验证码案例
验证码接口代码
@GetMapping("captcha")
    public void captcha(HttpServletResponse response, HttpSession session) throws IOException {
        ServletOutputStream out = response.getOutputStream();//从响应对象获取一个输出流对象;用于输出图片文件

        // ArithmeticCaptcha captcha = new ArithmeticCaptcha();//数字验证码对象
        SpecCaptcha captcha = new SpecCaptcha();//生成一个验证码对象
        // captcha.setLen(3);
        String text = captcha.text();//提取验证码文本内容
        session.setAttribute("captcha", text);//将验证码的值存放在session中
        System.out.println("获取的验证码文字是:" + text);//打印验证码的文字内容
        captcha.out(out);//使用响应对象的输出流输出到前端
    }

以上代码中将验证码的值塞到了session中;login接口的代码才能够应用session中存储的验证码值和前端传回的值进行对比从而让进行登陆验证

login代码:
@PostMapping("login")
    public String login(String username, String password, String code, HttpSession session, HttpServletRequest request) {
        // 进行登录
        String captcha = (String) session.getAttribute("captcha");
        // 比对session中的验证码和用户传过来的验证码
        if (captcha.equalsIgnoreCase(code)) {
            // 验证码正确,开始登录
            R r = userService.login(username, password);//login执行成功之后;R自动塞进去200
            if (Objects.equals(r.getCode(), R.SUCCESS)) { //SUCCESS静态的200
                
                // 登录成功后 重定向到日报列表接口
                return "redirect:jsp/daily/list";
            } else {
                request.setAttribute("error", "用户名或密码错误");
            }
        } else {
            request.setAttribute("error", "验证码错误");
        }
        return "index";
    }

上图中,${error}元素值取自request对象;该元素是在login时;通过setAttribute添加的

前端页面中显示验证码图片

上图中有代码如下

<img src="/captcha" alt="验证码"><br/>

此时,不同于异步请求;img标签的src会自动发送get请求(在页面加载的时候);

标签:--,text,idea,验证码,captcha,session,005,new,out
From: https://www.cnblogs.com/fengzidexuanxue/p/17583470.html

相关文章

  • GPU的硬件组成及运行原理
    GPU的硬件组成GPU是一种专门为图形处理而设计的处理器,它的设计目标是在处理大规模、高并发的图形数据时提供高效的计算能力。与CPU相比,GPU的处理器数量更多,每个处理器的计算能力相对较弱,但它们可以同时处理大量的数据,从而提供更高的计算效率。GPU的硬件组成包括:处理器单......
  • Java并发(十三)----共享存在的问题
    1、小故事老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快小南、小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用但小南不能一天24小时使用算盘,他经常要小憩一会(sleep),又或是去吃饭上厕所(阻塞io操作),有时还需要一根烟,没烟时思路......
  • 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)
    题目:classSolution{public:vector<int>exchange(vector<int>&nums){for(inti=0,j=nums.size()-1;i<j;i++){if(nums[i]%2==0){//从i前开始,遇到偶数开始处理while(nums[j]%2==0&&am......
  • Django基础介绍
    web应用简介Django框架是一个专门用来开发web项目的框架1.web应用程序是什么web应用程序是一种可以通过web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件2.应用程序又两种模式c/s、b/sDjango就是开发b/s程序的,所依,我们就认为浏览器是客户端,Django框架就......
  • List集合去重
    需求场景:接口返回的数据是一个List集合需要将这个集合中的数据进行一个过滤,保证没有重复数据.优点:使用迭代器进行去除多余数据不会,简单高效,不会发生过滤不全,数组越界等问题.实例代码:publicvoidlistTest(){List<String>list=newArrayList<>(Arrays.as......
  • Codeforces Round 888 (Div. 3) - D
    目录D.PrefixPermutationSumsCodeforcesRound888(Div.3)赛后摘记D.PrefixPermutationSums题意判断给定的长为n-1数组,是否为某个1~n的序列的前缀和数组漏了一个数形成的数组思路就是判断能否变回去,毫无感情的判断机器法一:统计给定前缀和数组的差分数组得......
  • Nginx反向代理 配置实例
    Nginx反向代理配置实例1.实现效果浏览器输入地址:www.xuxuxuxuxu.com,跳转到liunx系统tomcat主页面中2.准备准备好nginx、tomcat并启动nginx、tomcat服务可以在浏览器访问到tomcat主页3.实现在windos系统的hosts文件下修改域名解析建议使用vscode打开文件也可以通过......
  • 西门子HMI切换页面时的指示功能
    怎么样才能做到像这样按下切换界面的按钮,切换过去之后对应的切换按钮还进行高亮指示呢? 首先我们要先新建模板,把我们的画面拖拽到模板里就会形成按钮 在画面的“属性”中 在属性中选上我们刚刚新建的模板,并记住这个画面的编号(每个界面都要),当看到界面里面有模板中元素的......
  • 杭电多校2023 第三场
    1005直接dp即可#include<bits/stdc++.h>usingnamespacestd;intdp[5005][5005];intN;inta[5005];constintMOD=1e9+7;intmain(){intT;cin>>T;while(T--){intN;memset(dp,0,sizeof(dp));dp[1][1]=......
  • VSCODE 我常用的配置
    {"explorer.confirmDelete":false,"go.formatTool":"goimports","go.toolsManagement.autoUpdate":true,"terminal.integrated.fontFamily":"CascadiaCode","security.works......