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

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

  •  
  •   shayang888 · 2018-10-22 11:37:12 +08:00 · 1136 次点击
    这是一个创建于 1984 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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>

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2721 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.