Java TokenProcessor令牌校驗工具類
關(guān)于TokenProcessor令牌校驗工具類廢話不多說了,直接給大家貼代碼了,一切內(nèi)容就在下面一段代碼中,具體代碼詳情如下所示:
public class TokenProcessor {
private long privious;// 上次生成表單標識號得時間值
private static TokenProcessor instance = new TokenProcessor();
public static String FORM_TOKEN_KEY = "FORM_TOKEN_KEY";
private TokenProcessor() {
}
public static TokenProcessor getInstance() {
return instance;
}
/**
* 驗證請求中得標識號是否有效,如果請求中的表單標識與當前用戶session中的相同,返回結(jié)果true=
*/
public synchronized boolean isTokenValid(HttpServletRequest request) {
// 為避免session對象不存在時候創(chuàng)建Session對象
HttpSession session = request.getSession(false);
if (session == null) {
return false;
}
String saved = (String) session.getAttribute(FORM_TOKEN_KEY);
if (saved == null) {
return false;
}
String token = (String) request.getParameter(FORM_TOKEN_KEY);
if (token == null) {
return false;
}
return saved.equals(token);
}
/**
* 驗證請求中得標識號是否有效,如果請求中的表單標識與當前用戶session中的相同,返回結(jié)果true=
*/
public synchronized boolean isTokenValid(HttpServletRequest request,String token) {
// 未避免session對象不存在時候創(chuàng)建Session對象
HttpSession session = request.getSession(false);
if (session == null) {
return false;
}
String saved = (String) session.getAttribute(FORM_TOKEN_KEY);
if (saved == null) {
return false;
}
if (token == null) {
return false;
}
return saved.equals(token);
}
/**
* 清除存儲在當前用戶session中的表單標識號
*/
public synchronized void reset(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null) {
return;
}
session.removeAttribute(FORM_TOKEN_KEY);
}
/**
* 產(chǎn)生表單標識號并將之保存在當前用戶得session中
*/
public synchronized void saveToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
long current = System.currentTimeMillis();
if (current == privious) {
current++;
}
privious = current;
byte now[] = String.valueOf(current).getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
String token = toHex(md.digest());
session.setAttribute(FORM_TOKEN_KEY, token);
} catch (NoSuchAlgorithmException e) {
}
}
/**
* 將一個字節(jié)數(shù)轉(zhuǎn)換成十六進制得字符串
*/
public String toHex(byte buffer[]) {
StringBuffer sb = new StringBuffer(buffer.length * 2);
for (int i = 0; i < buffer.length; i++) {
sb.append(Character.forDigit((buffer[i] & 0x60) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
}
return sb.toString();
}
}
以上所述是小編給大家介紹的Java TokenProcessor令牌校驗工具類,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
SpringMVC Restful api接口實現(xiàn)的代碼
本篇文章主要介紹了SpringMVC Restful api接口實現(xiàn)的代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
Spring Cloud Config與Bus整合實現(xiàn)微服務配置自動刷新功能
通過整合SpringCloud Config與Spring Cloud Bus,實現(xiàn)了微服務配置的自動刷新功能,這個機制允許一個微服務實例在配置更新時通過消息總線通知其他所有實例同步更新,從而保持配置的一致性并提升系統(tǒng)的運維效率2024-10-10
Spring中事務管理的四種方法(銀行轉(zhuǎn)賬為例)
這篇文章主要給大家介紹了關(guān)于Spring中事務管理的四種方法,文中是以銀行轉(zhuǎn)賬為例,通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-05-05
JAVA的LIST接口的REMOVE重載方法調(diào)用原理解析
這篇文章主要介紹了JAVA的LIST接口的REMOVE重載方法調(diào)用原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10
Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list
這篇文章主要介紹了Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
圖解Java經(jīng)典算法冒泡排序的原理與實現(xiàn)
冒泡排序是一種簡單的排序算法,它也是一種穩(wěn)定排序算法。其實現(xiàn)原理是重復掃描待排序序列,并比較每一對相鄰的元素,當該對元素順序不正確時進行交換。一直重復這個過程,直到?jīng)]有任何兩個相鄰元素可以交換,就表明完成了排序2022-09-09

