课程名称:Spring Cloud 进阶 Alibaba 微服务体系自媒体实战
课程章节: 第3章 开发通行证有关服务
主讲老师: 风间影月
课程内容
用户一旦登录注册成功,则需要设置会话,由于分布式微服务,使用分布式会话,用户token等信息存入redis。与此同时,在cookie中也需要设置用户的相关信息。
完善 PassportController.doLogin()
public static final String REDIS_USER_TOKEN = "redis_user_token";
int userActiveStatus = user.getActiveStatus(); // 如果用户状态已经被封了,则不设置会话与cookie信息 if (userActiveStatus != UserStatus.FROZEN.type) { // 3. 用户的分布式会话设置 String uniqueToken = UUID.randomUUID().toString().trim(); redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uniqueToken); // 4. 用户userId与token放入cookie setCookie(request, response, "utoken", uniqueToken, COOKIE_MONTH); setCookie(request, response, "uid", user.getId(), COOKIE_MONTH); } // 5. 用户登录成功则需要删除已经使用过的短信验证码,该验证码只能匹配使用一次,过后作废 // redis.del(MOBILE_SMSCODE + mobile); // 6. 用户状态:未激活或者已激活,返回给前端,用于页面跳转 return GraceJSONResult.ok(userActiveStatus);
cookie的封装方法,可以统一调用。
public static final String DOMAIN_NAME = "imoocnews.com"; public static final Integer COOKIE_MONTH = 30 * 24 * 60 * 60; public void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, Integer MaxAge) { try { cookieValue = URLEncoder.encode(cookieValue, "utf-8"); setCookieValue(request, response, cookieName, cookieValue, MaxAge); // Cookie cookie = new Cookie(cookieName, cookieValue); // cookie.setMaxAge(MaxAge); // cookie.setDomain(DOMAIN_NAME); // cookie.setPath("/"); // response.addCookie(cookie); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public void setCookieValue(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, Integer MaxAge) { Cookie cookie = new Cookie(cookieName, cookieValue); cookie.setMaxAge(MaxAge); cookie.setDomain(DOMAIN_NAME); cookie.setPath("/"); response.addCookie(cookie); }
课程收获
1.cookie是什么
cookie也叫HTTPCookie,是客户端与服务器端进行会话(session)使用的一个能够在浏览器本地化存储的技术。
cookie就是为了存储sessionId而诞生
cookie的特性,会随着要请求自动化携带cookie的值到服务器
2.cookie的作用
cookie的作用主要是在浏览器存储少量的数据,利用cookie我们可以实现保存数据的功能。
3.完成了系统模块的Cookie对接。