jfinal表单重复提交用token的机制来实现
我看TokenManager的createToken的代码生成完的token是存放在session中,以便之后来比较去前端界面传过来的token做校验
createToken
String tokenId = String.valueOf(random.nextLong()); controller.setAttr(tokenName, tokenId); controller.setSessionAttr(tokenName, tokenId); createTokenHiddenField(controller, tokenName, tokenId);
验证validToken
String serverTokenId = controller.getSessionAttr(tokenName); controller.removeSessionAttr(tokenName); // important! return StrKit.notBlank(clientTokenId) && clientTokenId.equals(serverTokenId);
但是这样有个问题是,一旦我的服务器是集群的,是否session不是共享的?
两次客户端的请求如果第一次发送到A服务器把token存到A服务器的session中,第二次如果请求到B服务器,验证token发现B服务器中session并没有存放token这样的话就出问题了,我想问一下是否存在这样的情况。
如果存在是否我要做一个session共享的机制,现在session共享的机制的解决方案有哪些?
我的项目环境是jfinal + redis + mysql +tomcat