不使用session,借助redis實現驗證碼

1.首先看一下基本的流程

2.看一下代碼

   注:其中用到的一些工具類,可以到我的github上去下載

    ?https://github.com/hjzgg/usually_util/tree/master/utils

    windows 下的 redis下載

    https://github.com/hjzgg/redis

  獲取驗證碼的tooken

   @RequestMapping(value="loginCode")@ResponseBodypublic String getCode(){PrintWriter out = null;JSONObject jsono = new JSONObject();try {
       //驗證碼工具類ValidateCode vCode
= new ValidateCode(55,25,4,80);String randomCode = vCode.randomCode();String encCode = DesUtil.strEnc(randomCode+System.currentTimeMillis(), "1", "2", "3");//存儲驗證碼字符串,過期時間為1分鐘 redisTemplate.opsForValue().set(encCode, randomCode);redisTemplate.expire(encCode, 1, TimeUnit.MINUTES);//存儲驗證碼生成器,過期時間為1分鐘redisTemplate.opsForValue().set(encCode+"ValidateCode", SerializeUtil.serialize(vCode));redisTemplate.expire(encCode+"ValidateCode", 1, TimeUnit.MINUTES);jsono.put("success", true);jsono.put("message", encCode);} catch (Exception e) {e.printStackTrace();jsono.put("success", true);jsono.put("message", "inner error.");} finally{if(out != null) {out.flush();out.close();}}return jsono.toString();}

  本例中的tooken是通過加密生成的,加密串為 驗證碼+當前時間。或者采用UUID生成唯一tooken,都是可以得。生成ValidateCode(驗證碼工具類),然后將鍵值對(tooken,ValidateCode)放入redis中。

  ?獲取驗證碼圖片

  @RequestMapping(value="loginCodeImage")public void getCodeImage(String codeAuth, HttpServletResponse response){if(codeAuth == null) return;String randomCode = (String) redisTemplate.opsForValue().get(codeAuth);if(randomCode == null) return;ValidateCode vCode = (ValidateCode)SerializeUtil.unserialize((byte[])redisTemplate.opsForValue().get(codeAuth+"ValidateCode"));//產生圖片
        vCode.createCode(randomCode);if(vCode == null) return;// 設置響應的類型格式為圖片格式  response.setContentType("image/jpeg");  //禁止圖像緩存。  response.setHeader("Pragma", "no-cache");  response.setHeader("Cache-Control", "no-cache");  response.setDateHeader("Expires", 0);  try {vCode.write(response.getOutputStream());} catch (IOException e) {e.printStackTrace();}  }

  根據tooken,在redis中找到對應的ValidateCode(驗證碼工具類),生成驗證碼圖片。

3.前臺獲取驗證碼

  網頁中獲取

    <img src="htpp://......"/>

? ? ? java中獲取

  public static ImageIcon getCodeImage(){String data = JavaRequest.sendPost("loginCode", null);JSONObject result = JSONObject.fromObject(data);if((Boolean) result.get("success")){JavaRequest.codeAuth = result.getString("message");ImageIcon codeImg = null;try{codeImg = new ImageIcon(new URL(“.....”));} catch (Exception e) {e.printStackTrace();return null;}return codeImg;} else {System.out.println("獲取驗證碼圖片: " + result);return null;}}ImageIcon codeImg = JavaRequest.getCodeImage();if(codeImg == null){codeImg = new ImageIcon("獲取失敗的圖片.png");}
  /
JLable codeImgLabel = new JLabel(codeImg);

?

轉載于:https://www.cnblogs.com/hujunzheng/p/5490899.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PS批處理的使用

一、 前言 做開發的時候&#xff0c;最多的時候就是圖片的使用了。有時候圖片的處理都按照同樣的步驟&#xff0c;比如說統一將圖片的大小調整為固定大小&#xff0c;或者統一在所有的圖片的的某個位置上加入文字或者小圖片等等&#xff0c;這時候PS的批處理可以幫你完成這些重…

exe4j的使用

下載&#xff1a;http://download.cnet.com/exe4j/3000-2070_4-144405.html 參考&#xff1a;http://blog.chinaunix.net/uid-25749806-id-4380850.html 注&#xff1a;打包成jar包的一般就是src目錄&#xff0c;其他目錄放到目標文件夾中&#xff0c;目錄結構如下 如何解決exe…

c語言指針和數組的聯系

c語言指針與數組**一、指針與一維數組**1.一維數組的存儲方式2. 對一維數組名的理解3. 數組下標和指針的關系4.一位數組名與取數組首地址的區別**二、指針與二維數組**1.二維數組的存儲方式2.二維數組下標和指針的對應關系例題:懷著忐忑的心情寫了人生第一篇博客......誠惶誠恐…

android模擬器默認位置的修改

1.創建ANDROID_SDK_HOME環境變量&#xff0c;如ANDROID_SDK_HOMED:\eclipse_android\android-sdk 2.在ANDROID_SDK_HOME目錄下&#xff0c;建立.android目錄 3.默認的avd路徑是C:\Users\Administrator\.android, 將里面的內容放入到ANDROID_SDK_HOME中的.android目錄下 4.windo…

python 求出4行5列的二維數組周邊元素之和

題目:求出4行5列的二維數組周邊元素之和 代碼&#xff1a; import random x [[random.randint(1,10)for j in range(5)]for i in range(4)] for item in x:print(item) y [x[0][0],x[0][1],x[0][2],x[0][3],x[0][4],x[1][0],x[1][4],x[2][0],x[2][4],x[3][0],x[3][4]] prin…

android表白app

一、前言 馬上就要520和521了&#xff0c;是不是還有像我一樣的單身狗啊。我就知道有&#xff0c;所以這兩天簡單寫了這個小程序&#xff08;其實是替別人寫的&#xff09;&#xff0c;雖然我并不會用去騙女孩子&#xff08;因為最近太忙了&#xff0c;實習完之后要搞畢設&…

c語言:malloc函數的簡介

文章目錄一、為什么需要malloc函數&#xff1f;二、如何使用malloc函數&#xff1f;三、用malloc函數自定義數組長度一、為什么需要malloc函數&#xff1f; 用于解決傳統數組以下缺點。 ①傳統數組的長度必須要事先指定。 ②傳統數組的內存無法手動釋放。 ③傳統數組的長度定義…

webpack+react+es6開發模式

一、前言 實習了兩個月&#xff0c;把在公司用到的前端開發模式做個簡單的整理。公司里前端開發模式webpackreactreduxes6&#xff0c;這里去掉了redux。 webpack, react, redux等學習網址&#xff1a;http://www.cnblogs.com/hujunzheng/p/5405780.html 二、簡單的步驟條組件 …

c語言輸入字符時控制符%c前加空格的原因解釋

文章目錄一、前景知識1、緩沖區2、標準輸入流二、scanf語句的執行1、scanf對于整形%d的輸入2、scanf對于字符%c的輸入在編一個代碼時偶然間發現一個知識盲點…用scanf語句輸入字符時需要在控制符%c前加空格。在解釋相關這個原因前我們需要了解幾個相關知識點。 一、前景知識 1…

git命令分類圖

轉載于:https://www.cnblogs.com/hujunzheng/p/5560826.html

python中為什么沒有自增或者自減

在c語言和c中我們經常會用到自增或者自減的語句&#xff0c;但對于python中如果運用這種格式便會報錯…why&#xff1f; 一、預備知識 小整數池 python中為了提高儲存效率&#xff0c;對于int類型的整型變量的儲存&#xff0c;有一個專門的小整數池&#xff0c;它會存放-5到256…

數據結構算法模擬系統

一、前言 學習數據結構已經有很長時間了&#xff0c;加上之前搞過一段時間的ACM&#xff0c;雖然搞得并不怎么樣吧&#xff0c;但是喜歡的東西不能放棄&#xff0c;一直打算寫一個算法模擬系統&#xff0c;對常用的一些算法進行簡單的模擬&#xff0c;于是我的畢業設計就這樣誕…

python語言map函數及map object at 亂碼錯誤

文章目錄一、map函數的簡介1、map函數的作用2、語法格式3、舉例例1、例2、二、報錯一、map函數的簡介 1、map函數的作用 對某個序列以給定的函數格式作映射。 2、語法格式 map(function,iterable) ??function可以填函數&#xff0c;也可以填數據類型 3、舉例 例1、 a [1,2,…

推薦幾款jquery圖片切換插件

一、前言 畢業季到了&#xff0c;大家都在匆匆忙忙的記錄大學里最美好的時光&#xff0c;照片中各種花式、各種姿勢都涌現出來了。這么多的照片怎么展示出來給自己的好友看呢&#xff1f;有人選擇做成視頻&#xff0c;有人選擇ps之后做成圖片集&#xff0c;而我選擇利用靜態網頁…

c語言表白

馬上就要520了&#xff0c;不少小伙伴們一定開始想盡各種辦法進行表白了…那么身為奔跑在程序員道路上的我們也一定要有獨特的表白方法&#xff01; 下面是一段表白代碼&#xff0c;請直接搬去用吧&#xff01;&#xff01;&#xff01; #include <stdio.h> void change…

java注意的一些細節問題

1. 大括弧作用域問題 public static void main(String[] args) {{int x;{int x;//編譯錯誤&#xff1a;Duplicate local variable x}} } 2.boolean值的運算 public static void main(String[] args) {if(true && false) {}if(true & false) {}System.out.println(t…

python表白

馬上就要520了&#xff0c;不少小伙伴們一定開始想盡各種辦法進行表白了…那么身為奔跑在程序員道路上的我們也一定要有獨特的表白方法&#xff01; 下面是一段表白代碼&#xff0c;請直接搬去用吧&#xff01;&#xff01;&#xff01; import turtle import timedef hart_ar…

git revert和reset區別

1.在github上建立測試項目并克隆到本地 2.本地中新建兩個文本文件 3.將a.txt commit并push到遠程倉庫 執行 git add a.txt, git commit -m "a.txt", git push 4.將b.txt提交到本地倉庫&#xff0c;不執行push 通過gitk命令查看提交歷史如下&#xff1a; 情景&#xf…

python基礎知識點整理(1)

目錄一、變量與數據類型1、變量① 變量的命名規則2、字符串常用的庫函數二、列表1、列表的基礎定義2、列表常用的庫函數3、for循環與列表4、列表切片5、元組三、if語句四、字典1、字典定義2、對字典的操作一、變量與數據類型 1、變量 ① 變量的命名規則 只能包含數字、字母以…

sorl6.0+jetty+mysql搭建solr服務

1.下載solr 官網&#xff1a;http://lucene.apache.org/solr/ 2.目錄結構如下 3.啟動solr&#xff08;默認使用jetty部署&#xff09; 在path路徑下將 bin文件夾對應的目錄加入&#xff0c;然后輸入 solr start&#xff08;或者 solr start -p port&#xff0c;指定端口啟動&am…