文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:
好好学java
,获取优质学习资源。
一、微信用户扫码登录业务逻辑
微信用户登录的时候,每次都会带着
openid
(用户唯一标志),因此当用户第一次登录的时候,我们就需要将这个
openid
保存到数据库,或者保存到redis中,当用户再次登录的时候,我们需要进行下面的步骤。
第一步:我们需要到数据库里用户信息表查找有没有此
openid
。
这里
Controller
需要调用
service
里的方法,数据库里没有,则用户不能登录,有就进入第二步。
第二步:我们需要将这个
openid
保存在
redis
中。
另外,产生一个唯一的
token
作为key,这个token也是唯一的标识。
String token= UUID.randomUUID().toString();
这里才采用的是
UUID
生成,当然你也可以用其他的方式生成。
然后以(
token,openid
)这样的key、value对保存到redis中。
Integer expire= RedisConstant.EXPIRE;
redisUtils.set(String.format(RedisConstant.TOKEN_PREFIX,token),openid,expire, TimeUnit.SECONDS);
这一步就是用redis保存,如果不清楚redis,可以先去了解一下redis。
第三步:设置token到cookie中。
CookieUtil.set(response, CookieConstant.TOKEN,token,expire);
下面再给出cookie的工具类
/**
* Cookie工具类
* Created by SqMax on 2018/4/1.
*/
public class CookieUtil {<!-- -->
public static void set(HttpServletResponse response,
String name,
String value,
int maxAge){
Cookie cookie=new Cookie(name,value);
cookie.setPath("/");
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
/**
* 获取cookie
* @param request
* @param name
* @return
*/
public static Cookie get(HttpServletRequest request,
String name){
Map<String,Cookie> cookieMap=readCookieMap(request);
if(cookieMap.containsKey(name)){
return cookieMap.get(name);
}else{
return null;
}
}
/**
* 将Cookie封装成Map
* @param request
* @return
*/
private static Map<String,Cookie> readCookieMap(HttpServletRequest request){
Map<String,Cookie> cookieMap=new HashMap<>();
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
cookieMap.put(cookie.getName(),cookie);
}
}
return cookieMap;
}
}
这样就把(
CookeiConstant.TOKEN,token
)这样的key、value对保存的了用户的cookie中了。
经过这三步,用户就能成功登录系统了。
二、微信用户退出登录
用户登出也需要三步
第一步: 用户登出请求发出时,到请求对象HttpServletRequest里,查找key为CookieConstant.TOKEN的cookie。
Cookie cookie=CookieUtil.get(request,CookieConstant.TOKEN);
cookie工具类见上面。
第二步 清除redis中的用户登录信息
redisTemplate.opsForValue().getOperations().delete(String.format(RedisConstant.TOKEN_PREFIX,cookie.getValue()));
第三步 清除用户的cookie信息
CookieUtil.set(response,CookieConstant.TOKEN,null,0);
这样用户就成功登出了。
三、总结
总的来说微信登录和退出就分为以下三步:
- 查看
openid
数据库是否存在- 将token和openid保存到redis- 将token唯一标识设置到cookie,供前端使用
原文地址:https://sihai.blog.csdn.net/article/details/80924313