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

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 微信用户扫码登录和登录退出的业务逻辑实现(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&lt;String,Cookie&gt; cookieMap=readCookieMap(request);
        if(cookieMap.containsKey(name)){
            return cookieMap.get(name);
        }else{
            return null;
        }

    }

    /**
     * 将Cookie封装成Map
     * @param request
     * @return
     */
    private static Map&lt;String,Cookie&gt; readCookieMap(HttpServletRequest request){
        Map&lt;String,Cookie&gt; cookieMap=new HashMap&lt;&gt;();
        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);

这样用户就成功登出了。

三、总结

总的来说微信登录和退出就分为以下三步:

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 微信用户扫码登录和登录退出的业务逻辑实现(java版)


 上一篇
微信公众号支付开发全过程(java版) 微信公众号支付开发全过程(java版)
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号: 好好学java,获取优质学习资源。 一、微信官方文档微信支付开发流程(公众号支付)首先我们到微信支付的官方文档的部分查看一下需要的设置。 因为微信支付需要
2021-04-04
下一篇 
java使用websocket前后端通信实现 java使用websocket前后端通信实现
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号: 好好学java,获取优质学习资源。 WebSocket是客户端和服务器端的一个通信,WebSocket分为客户端和服务端,所以我们两个端都要开发,前端的Web
2021-04-04