【发布时间】:2017-01-01 14:21:13
【问题描述】:
我一直致力于在我的电子商务应用程序中实现Punchout。我的实现工作如下。
直到昨天一切正常,然后当重定向到店面发生时,会话开始丢弃。
我的观察:
在重定向发生之前HttpServletRequest 对象是RequestFacade,但是在我重定向之后,它变成了ApplicationHttpRequest。我可以找到包裹在ApplicationHttpRequest 中的RequestFacade,但我找不到放入会话中的对象。下面是我用来将对象放入会话的函数。
/**
* Creates an object of {@link PunchoutSessionDTO} and puts it in
* the session, making it a punchout session.
*
* @param punchoutTransaction
* The {@link PunchoutTransaction} object passed from the
* {@link PunchoutStoreEntryController}.
* @param session
* The {@link HttpSession}.
*/
public void createPunchoutSession(PunchoutTransaction punchoutTransaction, HttpSession session) {
// Create a PunchoutSessionDTO object.
PunchoutSessionDTO state = new PunchoutSessionDTO();
// Initialize it with the variables from the PunchoutTransaction
// object passed to it.
state.setBrowserFormPost(punchoutTransaction.getCallbackURL());
state.setBuyerCookie(punchoutTransaction.getBuyerCookie());
state.setFromId(punchoutTransaction.getFromId());
state.setToId(punchoutTransaction.getToId());
state.setPoTransId(punchoutTransaction.getTransactionId());
state.setOciPunchout(punchoutTransaction.getTransactionType() == PunchoutTransaction.TYPE_OCI);
// And put it in the session, so that the session could be
// identified as a punchout session.
session.setAttribute("PunchoutState", state);
// Set the max inactive interval of the session to the value
// provided in the store property. If such store property is
// not found, a default of 5 minutes is used.
/*String vid = punchoutTransaction.getVendorId();
Integer timeout = PunchoutStorePropertyFactory.getTimeoutPeriod(vid);
session.setMaxInactiveInterval( (timeout == null ? 5 : timeout) * 60); */
logger.info("Punchout Session Created for " + punchoutTransaction.getBuyerCookie());
}
在我决定应该为会话设置超时值之前,一切正常。在此之后,问题开始出现。起初,我以为我通过传递 setMaxInactiveInterval() 的错误值来搞砸了,所以我评论了它。令我惊讶的是,会话还是被放弃了。
请注意:
- 我们在
Windows 8.1上使用Apache Tomcat。
Server version: Apache Tomcat/7.0.54 Server built: May 19 2014 10:26:15 Server number: 7.0.54.0 OS Name: Windows 8 OS Version: 6.2 Architecture: amd64 JVM Version: 1.7.0_51-b13 JVM Vendor: Oracle Corporation
我们使用的是 Spring 2.5。是的!而且我们无法迁移,因为这个应用程序非常庞大(超过 10,000 个源文件)。
URL 模式
*.po和*.html映射到同一个 servlet,因此重定向发生在同一个 servlet 内。
谷歌搜索:
为什么 HttpServletRequest 对象会发生变化。
HttpServletRequest 更改为 ApplicationHttpRequest
HttpServletRequest 到 ApplicationHttpRequest
Spring ServletRequest 对象变化
重定向后HttpServletRequest发生变化
自过去 3 天以来,这个愚蠢的错误让我们很生气。任何帮助,将不胜感激!请指出我犯的任何愚蠢的错误,并且一些与会话处理/管理相关的好技巧是最受欢迎的。如果您认为我没有提供足够的信息,请同时指出。谢谢:)
【问题讨论】:
标签: spring spring-mvc tomcat servlets