登录的token,redis操作

该篇博客介绍了如何在Spring Boot应用中实现用户登录和登出。通过openid从数据库验证用户,生成并存储token到Redis,同时将token设置到cookie。登出时,从cookie获取token,清除Redis中的对应记录,并移除cookie。涉及的技术包括Spring Security、Redis和cookie操作。
摘要由CSDN通过智能技术生成
@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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值