token令牌 util
阿新 • • 發佈:2018-11-09
在web開發中,有時候為了防止表單的重複提交,都會在表單域中埋有一個token令牌,然後在伺服器端將此token儲存到redis或者session中,當用戶提交表單時,則比較token,被使用過的令牌token立刻作廢。當此token再次發起請求時,則認為此請求已經處理過;從而達到避免表單的重複提交。
package Token; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import Decoder.BASE64Encoder; //令牌生產器 public class TokenProcessor { private TokenProcessor(){} private static TokenProcessor instance = new TokenProcessor(); public static TokenProcessor getInstance(){ return instance; } public String generateTokeCode(){ String value = System.currentTimeMillis()+new Random().nextInt()+""; System.out.println(value); long currentTime = System.currentTimeMillis(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy年-MM月dd日-HH時mm分ss秒"); Date date = new Date(currentTime); System.out.println(formatter.format(date)); //獲取資料指紋,指紋是唯一的 try { MessageDigest md = MessageDigest.getInstance("md5"); byte[] b = md.digest(value.getBytes());//產生資料的指紋 //Base64編碼 BASE64Encoder be = new BASE64Encoder(); be.encode(b); System.out.println(be.encode(b)); return be.encode(b);//制定一個編碼 } catch (NoSuchAlgorithmException e){ e.printStackTrace(); } return null; } public static void main(String[] args) { TokenProcessor processor=new TokenProcessor(); processor.generateTokeCode(); } }