Sa-Token学习笔记-04

Session会话

  • Account-Session 以账号 id 为主,只要 token 指向的账号 id 一致,那么对应的Session对象就一致
  • Token-Session 以token为主,只要token不同,那么对应的Session对象就不同
  • Custom-Session 以特定的key为主,不同key对应不同的Session对象,同样的key指向同一个Session对象

假设三个客户端登录同一账号,且配置了不共享token,那么此时的Session模型是:

要点:

  1. SaSessionHttpSession 没有任何关系,在HttpSession上写入的值,在SaSession中无法取出
  2. HttpSession并未被框架接管,在使用Sa-Token时,请在任何情况下均使用SaSession,不要使用HttpSession

测试代码

package com.hayaizo.satoken.controller;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.SaSessionCustomUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.hayaizo.satoken.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

/**
 * @author moxiao
 */
@RestController
@RequestMapping("/session")
public class SaSessionController {

    /*
     * 前提:首先调用登录接口进行登陆
     */

    // 简单存取值   ---- http://localhost:8081/session/getValue
    @RequestMapping("getValue")
    public SaResult getValue(){
        // 获取当前账号的SaSession对象,它和HttpSession不一样
        SaSession session = StpUtil.getSession();

        // 存值
        session.set("name","hayaizo");
        session.set("age",18);

        // 取值
        Object name = session.get("name");
        String name1 = session.getString("name");
        int age = session.getInt("age");
        long age1 = session.getLong("age");
        float age2 = session.getFloat("age");
        int age10 = session.get("age10", 22);
        int age11 = session.get("age10", () -> {
            return 26;
        });

        List<Object> list = Arrays.asList(name, name1, age, age1, age2, age11);
        System.out.println(list);

        return SaResult.data(list);
    }

    // 复杂存取值   ---- http://localhost:8081/session/getModel
    @RequestMapping("getModel")
    public SaResult getModel(){
        // 实例化
        User user = new User();
        user.setName("hayaizo");
        user.setId("1");
        SaSession session = StpUtil.getSession();
        session.set("user",user);

        User sessionModel = session.getModel("user", User.class);

        return SaResult.data(sessionModel);
    }

    // TokenSession
    @RequestMapping("tokenSession")
    public SaResult tokenSession(){
        // 获取到当前的token
        String tokenValue = StpUtil.getTokenValue();
        SaSession tokenSession = StpUtil.getTokenSessionByToken(tokenValue);

        return SaResult.data(tokenSession);

    }

    // 自定义Session  ---  http://localhost:8081/session/customSession
    @RequestMapping("customSession")
    public SaResult customSession(){
        SaSession roleSession = SaSessionCustomUtil.getSessionById("role-1001");

        // 存值
        roleSession.set("test","testCustomSession");

        System.out.println(roleSession.get("test"));

        return SaResult.data(roleSession.get("test"));
    }

}
分类: Sa-Token 标签: Sa-Token

评论

暂无评论数据

暂无评论数据

目录