java 后台设置cookie

现在前后端分离技术是一个比较流行的开发模式,前端与后端分别运行在不同的环境中,后端没有与前端直接关联

前端向用户展示页面,后端向前端提供数据接口,前后端通过唯一标识token进行数据交互

什么是token
    token是前后端交互的凭证, 拿着这个凭证前端可以频繁访问后端且不用做权限验证

token生成步骤
    1. 前端用户登录后,后端会返回一个唯一标识token,
    2. 前端将token存起来,每次访问后台时都会带着这个token,
    3. 后端会获取请求里的token, 验证token是否合法
    4. 后端向前端返回数据

这么说起来很简单,但实际开发中也不是那么容易的

首先我们会在用户登录成功后进行用户的会话设置

/**
 * 设置会话信息
 */
public Map setSessions(HttpServletResponse resp){

    // 模拟登陆的用户数据 
    UserInfo userinfo = new UserInfo();
    userinfo.setId("A001");
    userinfo.setUserName("qi");
    userinfo.setPhone("132****1972");
    userinfo.setDept("开发部");

    //设置tokenKey
    String tokenKey = "uuid";

    // 将token存入缓存中  
    // token在项目中使用得场景很多, 有的有效期较短,比如验证码、短信验证,也有有效期长的,比如登录后
    // 这里在token后加个visit就是声明我是一个访问的token,与其他token进行区分
    redisUtil.set("token:visit:"+ userinfo.getUserid(),tokenKey,24*60*24);
    // 将用户的信息存入redis中, 存用户数据(这里没用到,但实际开发会通过缓存获取对象数据)
    redisUtil.set("token:data:visit:" + tokenKey, userinfo ,24*60*24);

    //设置cookie 这是一段伪代码,具体实现根据项目实际情况进行设置
    cookie = new Cookie("access_token", tokenKey);
    // 将cookie存入resp相应中
    resp.addCookie(cookie)

    // 将token翻入消息头
    resp.addHeader("access_token",tokenKey);

    // 将用户信息放入map中,返给前端
    HashMap hashMap = new HashMap();
    hashMap.put("userid",userinfo.getUserid());
    hashMap.put("userName",userinfo.getUserName());
    hashMap.put("access_token",tokenKey);
    return hashMap;
}

后端将token返回前端, 前端获取token并存储,每次访问后端是都要带上token

附: 后端验证 token的代码

/**
 * 判断token是否有效
 * @return
 */
private boolean isValidToken(HttpServletRequest req){

    // 获取 Header中的token
    String access_token=req.getHeader("access_token");
    // 获取用户主键
    String userId = req.getParameter("userId");

    if(StringUtil.trim(tokenKey).equals("")){
        return false;
    }
    // 拼接token的键
    String token = "token:visit:"+userId;
    // 判断这个对象是否存在
    boolean flag = redisUtil.hasKey(token);

    return flag;
}

写的不太好,还请大家多多指教

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值