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

2018-10-22 11:37:12 +08:00
 shayang888

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>

1142 次点击
所在节点    Java
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/499773

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX