@GetMapping("/login")
public ModelAndView login(@RequestParam("openid") String openid,
HttpServletResponse response,
Map<String, Object> map){
//1.和数据库的openid匹配
SellerInfo sellerInfo = sellerService.findSellerInfoByOpenid(openid);
if (sellerInfo == null) {
map.put("msg", ResultEnum.LOGIN_FAIL.getMessage());
map.put("url", "/sell/seller/order/list");
return new ModelAndView("common/error", map);
}
//2.设置token至redis
String token = UUID.randomUUID().toString();//随机生成token
Integer expire = RedisConstant.EXPIRE;//设置过期时间
//opsForValue:操作某些value,希望存储的是以token_开头的key
//四个参数:redis的key,2:value 3:过期时间 4:时间格式:秒
redisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_PREFIX, token), openid, expire, TimeUnit.SECONDS);
//3.设置token至cookie
CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
return new ModelAndView("redirect:/seller/order/list");
}
RedisConstant
Redis常量:
public interface RedisConstant {
String TOKEN_PREFIX = "token_%s";
Integer EXPIRE = 7200; //2H
}
CookieUtil类
public class CookieUtil {
public static void set(HttpServletResponse response,
String name,
String value,
int maxAge)
{
Cookie cookie = new Cookie(name,value);
cookie.setMaxAge(maxAge);
cookie.setPath("/");
response.addCookie(cookie);
}
}
登出:
@GetMapping("/loginout")
public ModelAndView loginout(HttpServletRequest request,
HttpServletResponse response,
Map<String, Object> map){
//1.从cookie查询
Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN);
if(cookie != null){
//2.清除redis
redisTemplate.opsForValue().getOperations().delete(String.format(RedisConstant.TOKEN_PREFIX,cookie.getvalue()));
//3.清楚cookie
CookieUtil.set(response, CookieConstant.TOKEN, null, 0);
}
map.put("msg", ResultEnum.LOGINOUT_SUCCESS.getMessage());
map.put("url", "/sell/seller/order/list");
return new ModelAndView("common/success", map);
}