首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  Java

为什么 Callable<T>返回类型会对 httpsession(redis 存的)修改产生影响?

  •  
  •   shayang888 · 24 天前 · 165 次点击

    httpsession 是用 redis 存的 如下,如果是 Object 的返回或者 Map<String,Object>的,那么每次请求这个接口在 redis 里可以看到 token 的值都会更新

    @RestController
    @RequestMapping(value = "/account")
    public class ForgetController {
    
        private final ForgetService forgetService;
    
        @Autowired
        private ForgetController(ForgetService forgetService) {
            this.forgetService = forgetService;
        }
    
        //调用 getToken 的 service
        @PostMapping(value = "/forget/token")
        public Object getTokenController(HttpSession httpSession) {
            return forgetService.getTokenService( httpSession);
        }
    }
    @Service
    public class ForgetService {
    
    //UUID 生成字符串,然后存到 httpsession 里,并且返回
    public Object getTokenService(HttpSession httpSession) {
        Map<String, Object> map = new HashMap<>(8);
        String token = UUID.randomUUID().toString();
        //创建一个 session key 为 token
        httpSession.setAttribute("token", token);
        map.put("status", ErrorEnum.TOKEN_SUSSCESS.getStatus());
        map.put("message", ErrorEnum.TOKEN_SUSSCESS.getMessage());
        map.put("data", httpSession.getAttribute("token"));
        return map;
        }
    }
    

    但是如果 controller 那里改成 Callable<object>/Callabl<Map<String, Object>>的话,就只会出现第一次请求的时候,redis 里 token 的值更新了,再次请求,token 的值还是不变

    </object>

    目前尚无回复
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2944 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 04:16 · PVG 12:16 · LAX 20:16 · JFK 23:16
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1