基于项目需求, 我们要实现一个基于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