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