微信用户扫码登录和登录退出的业务逻辑实现(java版)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学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,供前端使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-java-maker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值