我正在Tomcat 7 Servlet容器上使用Grails 2.2.3
后端开发Ajax Web应用程序。当我从我的IDE运行带有grails run
的应用程序时,一切都像魅力(我使用提供Tomcat 7实现的tomcat-grails-plugin
)。
现在,如果我将我的应用程序部署到独立的Tomcat 7,我将无法再使用HttpSession
,因为Tomcat正在为每个Ajax请求创建一个全新的会话,这使我无法工作与会话对象了。我猜我不是唯一一个在Tomcat 7上部署Ajax应用程序的人,我想在这里询问是否有人可以就如何解决这个问题给我一些建议?
阻止会话修复的伟大发明是否完全无法使用Session?
我仍然希望能够按照预期的方式使用HttpSession
,如果我无法保存与会话相关的数据,那么会话的想法就会变得荒谬(在我看来)对它...
我看到了什么问题吗?我做错了吗?
经过一些研究后我发现只有POST
请求会触发在Tomcat中创建新会话...有人可以解释这种行为吗?
答案 0 :(得分:0)
经过一些研究(甚至通过验证器类的源代码(http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/catalina/authenticator/)),我意识到它必须对Realm
文件中声明的server.xml
做一些事情。影响同一[engine] / [host]中的所有其他webapps,默认情况下会与Tomcat Manager一起使用。
只要我发送GET
请求一切正常,但如果我发送POST
请求,则会创建一个新的Session
但是因为我没有更改页面我m on(因为它是一个所谓的“单页面应用程序”,我总是在同一个index.gsp
页面上)Tomcat将其视为失败的登录尝试,并继续为每个{{{{{}创建新的Session
个对象1}}请求 - 我的页面上有很多POST
;)
因此,作为快速解决方案,我从POST
目录中删除了管理员,并从webapps
删除了Realm
声明,因为我已经在创建新的server.xml
我自己Session
后端成功登录尝试。