Java TokenProcessor令牌校驗(yàn)工具類
關(guān)于TokenProcessor令牌校驗(yàn)工具類廢話不多說了,直接給大家貼代碼了,一切內(nèi)容就在下面一段代碼中,具體代碼詳情如下所示:
public class TokenProcessor { private long privious;// 上次生成表單標(biāo)識號得時(shí)間值 private static TokenProcessor instance = new TokenProcessor(); public static String FORM_TOKEN_KEY = "FORM_TOKEN_KEY"; private TokenProcessor() { } public static TokenProcessor getInstance() { return instance; } /** * 驗(yàn)證請求中得標(biāo)識號是否有效,如果請求中的表單標(biāo)識與當(dāng)前用戶session中的相同,返回結(jié)果true= */ public synchronized boolean isTokenValid(HttpServletRequest request) { // 為避免session對象不存在時(shí)候創(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); } /** * 驗(yàn)證請求中得標(biāo)識號是否有效,如果請求中的表單標(biāo)識與當(dāng)前用戶session中的相同,返回結(jié)果true= */ public synchronized boolean isTokenValid(HttpServletRequest request,String token) { // 未避免session對象不存在時(shí)候創(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); } /** * 清除存儲在當(dāng)前用戶session中的表單標(biāo)識號 */ public synchronized void reset(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session == null) { return; } session.removeAttribute(FORM_TOKEN_KEY); } /** * 產(chǎn)生表單標(biāo)識號并將之保存在當(dāng)前用戶得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) { } } /** * 將一個(gè)字節(jié)數(shù)轉(zhuǎn)換成十六進(jì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令牌校驗(yàn)工具類,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java Swing JList列表框的實(shí)現(xiàn)
這篇文章主要介紹了Java Swing JList列表框的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Spring 實(shí)現(xiàn)自定義監(jiān)聽器案例
這篇文章主要介紹了Spring 實(shí)現(xiàn)自定義監(jiān)聽器案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01java編程之基于SpringBoot框架實(shí)現(xiàn)掃碼登錄
本文將介紹基于SpringBoot + Vue + Android實(shí)現(xiàn)的掃碼登錄demo的總體思路,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08以Java代碼的方式總結(jié)幾個(gè)典型的內(nèi)存溢出案例
作為程序員,多多少少都會遇到一些內(nèi)存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個(gè)假程序員!哈哈,開個(gè)玩笑.今天分享給大家Java內(nèi)存溢出的相關(guān)案例,希望大家在日常工作中,盡量避免寫這些low水平的代碼,需要的朋友可以參考下2021-06-06SpringBoot動態(tài)數(shù)據(jù)源連接測試的操作詳解
這篇文章主要介紹了SpringBoot動態(tài)數(shù)據(jù)源連接測試的操作步驟,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03json如何解析混合數(shù)組對象到實(shí)體類的list集合里去
這篇文章主要介紹了json解析混合數(shù)組對象到實(shí)體類的list集合里去的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06java單鏈表實(shí)現(xiàn)書籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java單鏈表實(shí)現(xiàn)書籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11