日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java令牌Token登錄與退出的實現(xiàn)

瀏覽:25日期:2022-09-01 09:28:53

Token

之前的博客已經(jīng)介紹了各種登錄的方式,現(xiàn)在直接介紹一種現(xiàn)在比較流行的登錄方式,無狀態(tài)登錄,只需要客戶端攜帶令牌就能登陸,服務(wù)器不再存儲登錄狀態(tài)。突然粉絲量爆棚,開心死了,所以抓緊寫一篇硬核代碼,分享給大家,拿來即用的代碼,直接copy即可。

使用之前需要配置一下xml

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt --><dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version></dependency>

下面為Java代碼

package com.caeser.midrug.util;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.apache.commons.lang3.time.DateUtils;import com.auth0.jwt.JWT;import com.auth0.jwt.JWTCreator;import com.auth0.jwt.JWTVerifier;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.interfaces.Claim;import com.auth0.jwt.interfaces.DecodedJWT;import com.google.common.collect.Maps;public class JwtHelper { private static final String SECRET = 'secret'; private static final String ISSURE= 'caeser'; public static String getToken(Map<String, String> claims) { Algorithm algorithm = Algorithm.HMAC256(SECRET); JWTCreator.Builder builder= JWT.create().withIssuer(ISSURE).withExpiresAt(DateUtils.addMinutes(new Date(), 3)); claims.forEach((k,v) ->builder.withClaim(k, v)); return builder.sign(algorithm).toString(); } public static String getTokenByMinute(Map<String, String> claims,int minute) { Algorithm algorithm = Algorithm.HMAC256(SECRET); JWTCreator.Builder builder= JWT.create().withIssuer(ISSURE).withExpiresAt(DateUtils.addMinutes(new Date(), minute)); claims.forEach((k,v) ->builder.withClaim(k, v)); return builder.sign(algorithm).toString(); } public static String getTokenByHour(Map<String, String> claims,int hour) { Algorithm algorithm = Algorithm.HMAC256(SECRET); JWTCreator.Builder builder= JWT.create().withIssuer(ISSURE).withExpiresAt(DateUtils.addHours(new Date(), hour)); claims.forEach((k,v) ->builder.withClaim(k, v)); return builder.sign(algorithm).toString(); } public static Map<String, String> verifyToken(String token){ Algorithm algorithm = Algorithm.HMAC256(SECRET); JWTVerifier verifier = JWT.require(algorithm).withIssuer(ISSURE).build(); DecodedJWT jwt =verifier.verify(token); Map<String, Claim> map = jwt.getClaims(); Map<String, String> resultMap = Maps.newHashMap(); map.forEach((k,v)->resultMap.put(k,v.asString())); return resultMap; } public static void main(String[] args) { }}

解釋

這段代碼其實非常簡單,作為調(diào)包俠的我們,只需要如何設(shè)置這個token生成就行了,我自己封裝了一個按分鐘和按小時校驗過期的方法。當(dāng)獲取到登錄名密碼后,我們校驗通過,就可以對該用戶生成一個token然后返回給前端就行了。

package com.caeser.midrug.service.impl;import java.util.HashMap;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.caeser.midrug.dao.UserAuthDao;import com.caeser.midrug.dto.Meta;import com.caeser.midrug.dto.UserAuthExe;import com.caeser.midrug.entity.UserAuth;import com.caeser.midrug.enums.UserAuthEnum;import com.caeser.midrug.service.UserAuthService;import com.caeser.midrug.util.JwtHelper;import com.caeser.midrug.util.MD5;import com.caeser.midrug.util.StaticVariable;@Servicepublic class UserAuthServiceImpl implements UserAuthService{ @Autowired UserAuthDao userAuthDao; @Override public UserAuthExe getAuth(String account,String password) { UserAuthExe userAuthExe=new UserAuthExe(); Meta meta=new Meta(); // 將傳過來的密碼進行MD5加密 String inputPwd=MD5.getMd5(password); // 將賬號與數(shù)據(jù)庫內(nèi)匹配 UserAuth dbAuth=userAuthDao.getPwdByAccount(account); if(dbAuth==null) { // 如果賬號不存在 meta.setMsg(UserAuthEnum.ACCOUNT_NONE.getStateInfo()); meta.setStatus(UserAuthEnum.ACCOUNT_NONE.getState()); } if(dbAuth!=null) { // 賬號存在 // 判斷密碼是否正確 if(dbAuth.getPassword().equals(inputPwd)) { // 密碼正確 Map<String, String> claim=new HashMap<String, String>(); // 存儲賬號密碼 claim.put('account', account); claim.put('password', password); // 賬號密碼保存到token String token=JwtHelper.getTokenByMinute(claim, StaticVariable.LOGINTIME_MINUTE); // 將token存儲到返回結(jié)果 userAuthExe.setToken(token); // 將用戶信息保存到返回結(jié)果 // 返回賬號 userAuthExe.setAcccount(account); // 返回用戶名 userAuthExe.setUserName(dbAuth.getUserName()); // 返回驗證成功信息 meta.setMsg(UserAuthEnum.SUCCESS.getStateInfo()); meta.setStatus(UserAuthEnum.SUCCESS.getState()); }else { // 密碼錯誤 meta.setMsg(UserAuthEnum.PWD_ERROR.getStateInfo()); meta.setStatus(UserAuthEnum.PWD_ERROR.getState()); } } // 存貯返回狀態(tài) userAuthExe.setMeta(meta); return userAuthExe; }}

其中有一串代碼需要大家注意,雖然我的注釋很全了,但是也要分清重點。

String token=JwtHelper.getTokenByMinute(claim, StaticVariable.LOGINTIME_MINUTE);// 將token存儲到返回結(jié)果userAuthExe.setToken(token);

就是生成并返回給前端的部分。我們再來看前端是如何保存的,我前端使用的Vue框架來寫的。

async loginAction() { // 輸入判空 if (this.loginAcStr === ’’ || this.loginPsStr === ’’) { return this.$message.error(’請輸入密碼’) } var qs = require(’qs’) const {data: res} = await axios.post(this.glAPI + ’/home/login’, qs.stringify({ username: this.loginAcStr, password: this.loginPsStr })) var dt = res.result if (dt.meta.status !== 1000) { if (dt.meta.status === 1001) { return this.$message.error(’賬號不存在’) } else { return this.$message.error(’賬號或密碼錯誤’) } } // 密碼正確 this.$toast(’登陸成功’) // 調(diào)用父組件方法獲取登錄信息 this.$emit(’loginGetUserIcon’) // 保存token window.sessionStorage.setItem(’token’, dt.token) // 隱藏 this.loginDrawerVisible = false // 調(diào)用父組件方法刷新購物車 this.$emit(’loginRefreshCart’) }

上述代碼里window.sessionStorage.setItem(’token’, dt.token)這句就是保存token,那么同理注銷也是針對sessionStoragewindow.sessionStorage.clear(),怎么樣是不是很簡單呀!

分析

為了讓尋找代碼的小伙伴看到最有用的內(nèi)容,上面減少了很多廢話,直接上代碼上注釋就好,下面的分析可以理解為一段可能多余的話,在以往存儲session或者cookie的時候,可以理解為一個所有瀏覽器都通用的全局變量,而token就是去除這個全局變量的,將信息保存在了客戶端本地,減輕服務(wù)器壓力,網(wǎng)上各種討論哪個好哪個有優(yōu)勢哪個有缺點,說真的,我還沒有見到實際的業(yè)務(wù)需求,所有并沒有那么深刻的體會,也無法給出詳細(xì)的解答,就目前而言,我實現(xiàn)了無狀態(tài)的登錄,而且可以校驗時間是否過期,這就夠了!

總結(jié)

就是如何生成一串字符串,如何保存,然后如何從這段字符串里分析出時間,然后判定是否過期,然后判定是否有效,就是這樣一個過程,我相信你可能或許不是很理解這個流程,但是你可以先嘗試著使用Token,我一開始是覺得很神奇的,后來想想,其實就是我們參加某次聚會,別人給你發(fā)了個工作證明,你憑這個證明就能參加會議了,只不過放到網(wǎng)絡(luò)上面確實比較抽象。

到此這篇關(guān)于Java令牌Token登錄與退出的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java Token登錄與退出內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人午夜精品| 亚洲少妇在线| 欧美日韩亚洲一区三区| 亚洲精品日本| 日韩av网站在线免费观看| 欧美一级久久| 久久久久亚洲精品中文字幕| 日韩av网站在线观看| 国产欧美一区二区三区精品观看| 久久国产免费看| 九九久久国产| 日本韩国欧美超级黄在线观看| 久久狠狠婷婷| 在线日韩中文| 日韩精品一级二级| 日韩精品乱码av一区二区| 久久伊人国产| 久久久久久久久丰满| 日韩和欧美一区二区| 福利精品在线| 国产免费播放一区二区| 亚洲精品高潮| 高清一区二区| 亚洲aa在线| 亚洲精品四区| 六月婷婷一区| 亚洲精品1区2区| 欧美xxxx中国| av最新在线| 亚洲精品一区二区妖精| 久久九九电影| 五月精品视频| 中文字幕一区日韩精品| 麻豆91在线播放| 99久久九九| 日韩精品中文字幕一区二区| 欧美91在线|欧美| 色综合狠狠操| 亚洲一区二区日韩| 老鸭窝一区二区久久精品| 欧美日韩国产在线观看网站| 国内精品伊人| 国产 日韩 欧美一区| 久久久久午夜电影| 欧美午夜精彩| 国产专区精品| 97精品国产| 久久天堂影院| 久久中文字幕二区| 在线精品国产亚洲| 久久99伊人| 国产农村妇女精品一二区| 日本а中文在线天堂| 久久亚洲国产| 亚洲毛片在线免费| 先锋亚洲精品| 日韩精品免费一区二区夜夜嗨| 日本大胆欧美人术艺术动态| 三级欧美在线一区| 日本在线观看不卡视频| 99精品综合| 亚洲91在线| 日韩欧美网址| 欧美日韩伊人| 国产视频一区三区| 97欧美在线视频| 日韩高清在线不卡| 蜜臀国产一区| 日韩超碰人人爽人人做人人添| 日韩精品麻豆| 国产精品蜜月aⅴ在线| 国产精品日本| 国产精品yjizz视频网| 日韩精彩视频在线观看| 亚洲五月婷婷| 欧美aa在线观看| 亚洲欧美日韩国产| 91精品国产自产精品男人的天堂| 久久久久久色 | 精品国内亚洲2022精品成人| 久久三级毛片| 91久久黄色| 亚洲日产国产精品| 欧美国产极品| 欧美一区二区三区激情视频| 你懂的国产精品永久在线| 日韩影院免费视频| 国产综合精品一区| av综合电影网站| 亚洲三级网站| 黄色欧美日韩| 亚洲爱爱视频| 黄色网一区二区| 欧美日韩精品一区二区三区在线观看| 久久在线91| 日韩黄色大片| 色婷婷狠狠五月综合天色拍| 国产成人免费| 狠狠干综合网| 婷婷激情综合| 日韩在线短视频| 999久久久精品国产| 亚洲不卡av不卡一区二区| 日本欧洲一区二区| 夜鲁夜鲁夜鲁视频在线播放| 精品久久一区| 精品久久一区| 精品日产乱码久久久久久仙踪林| 国产欧美一区二区三区米奇| 青草综合视频| 国产乱码精品一区二区三区四区 | 日韩av三区| 视频一区日韩精品| 亚洲视频国产| 亚洲伊人影院| 亚洲精品动态| 日韩欧美三区| 日韩极品在线观看| 欧美一级二级视频| 国产精品欧美一区二区三区不卡 | 欧美天堂在线| 国产乱码精品一区二区亚洲| 国产精品亚洲人成在99www| 日韩二区三区在线观看| 日韩精品免费一区二区夜夜嗨 | 久久99免费视频| 国产高清精品二区| 精品国产不卡一区二区| 国产中文在线播放| 欧美sss在线视频| 国产videos久久| 国产一区二区三区精品在线观看| 日本精品不卡| 中文字幕一区二区三区四区久久| 国产日韩一区二区三区在线播放| 国产一区二区三区视频在线| 欧美 日韩 国产精品免费观看| 中文字幕在线官网| 亚洲精品中文字幕99999| 精品久久中文| 婷婷视频一区二区三区| av中文资源在线资源免费观看| 亚洲欧美日韩国产一区| 麻豆91精品视频| 日韩精品免费一区二区三区| 亚洲免费资源| 日本免费一区二区三区四区| 在线亚洲自拍| 国产精品高清一区二区| 亚洲精品国产日韩| 日本va欧美va欧美va精品| 欧美黄色精品| 国产一区二区三区不卡视频网站| 久久五月天小说| 亚洲人成网站在线在线观看| 国产丝袜一区| 激情亚洲影院在线观看| 一二三区精品| 国产精品久久久网站| 亚洲精品网址| 亚洲啊v在线| 国产一区视频在线观看免费| 夜夜精品视频| 亚洲大全视频| 国产中文在线播放| 捆绑调教美女网站视频一区| 亚洲手机在线| 国产麻豆精品| 久久久精品午夜少妇| 亚洲精品在线a| 亚洲a成人v| 91精品国产经典在线观看| 涩涩涩久久久成人精品| 日韩福利视频一区| 精品国产成人| 日韩久久一区二区三区| 香蕉久久国产| 综合激情五月婷婷| 国产日产一区| 国产精品三级| 久久香蕉国产| 亚洲男人在线| 国产精品www994| 久久久9色精品国产一区二区三区| 免费高清在线一区| 国产一区二区三区国产精品| 噜噜噜躁狠狠躁狠狠精品视频| 精品午夜久久| 免费在线看一区| 中文字幕在线视频久| 日本aⅴ免费视频一区二区三区| 久草免费在线视频| 91精品丝袜国产高跟在线| 今天的高清视频免费播放成人| 国产丝袜一区| 美女黄网久久| 久久精品青草| 国产欧美日韩一级| 欧美中文日韩| 日韩精品不卡一区二区|