基于項目需求, 我們要實現一個基于redis實現token登錄驗證,該如何實現呢:
后端實現:
1.引入redis相關的依賴
1
2
3
4
5
6
7
8
9
|
< dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-data-redis</ artifactId > </ dependency > < dependency > < groupId >org.springframework.session</ groupId > < artifactId >spring-session-data-redis</ artifactId > < version >2.0.5.RELEASE</ version > </ dependency > |
2.Controller層生成token信息并存入redis中
1
2
3
4
5
6
7
8
9
10
11
|
//若用戶登錄驗證成功后將對應的登陸信息和登陸憑證一起存入redis中 //生成登陸憑證token UUID String uuidToken= UUID.randomUUID().toString(); uuidToken=uuidToken.replace( "-" , "" ); //將token和用戶登錄態之間建立聯系 redisTemplate.opsForValue().set(uuidToken,userModel); redisTemplate.expire(uuidToken, 1 , TimeUnit.HOURS); // 下發token return CommonReturnType.create(uuidToken); |
3.需要驗證的登陸的地方調用即可
1
2
3
4
5
6
7
8
9
10
11
12
|
String token = httpServletRequest.getParameterMap().get( "token" )[ 0 ]; if (StringUtils.isEmpty(token)) { throw new BusinessException(EmBusinessError.USER_NOT_LOGIN, "用戶還未登陸,不能下單" ); } //獲取用戶的登陸信息 UserModel userModel= (UserModel) redisTemplate.opsForValue().get(token); if (userModel== null ){ throw new BusinessException(EmBusinessError.USER_NOT_LOGIN, "用戶還未登陸,不能下單" ); } OrderModel orderModel = orderService.creatOrder(userModel.getId(), itemId, promoId, amount); return CommonReturnType.create( null ); |
前端實現
1.從返回值中取出token并存入localstorage
1
2
3
4
5
6
7
|
if (data.status == "success" ) { alert( "登陸成功" ); //取出token放入localstorage var token = data.data; window.localStorage[ "token" ] = token; window.location.href = "listitem.html" ; } |
2.驗證用戶是否登陸
1
2
3
4
5
6
|
var token = window.localStorage[ "token" ]; if (token == null ){ alert( "沒有登錄,不能下單" ); window.location.href= "login.html" rel= "external nofollow" ; return false ; } |
3.當然,需要把token傳入后端再校驗一次
1
|
url: "http://" +g_host+ "/order/createorder?token=" +token, |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/Baronrothschlid/article/details/97621406