我正在开发基于Struts2的Java EE Web应用程序(比如CNG
)。在特定时刻,用户被重定向到支付网关(比如IM
。com),然后IM
重定向到CNG
的动作。拦截器在每个Action检查会话变量之前运行,并且在从null
。com返回后显示值IM
。
为什么会这样?我如何处理这个问题,以便在重定向到另一个应用程序后保留我的会话?
编辑:
我在Action中设置了这样的会话:
SessionMap<String, Object> sessionMap = (SessionMap<String, Object>) ActionContext.getContext().getSession();
sessionMap.put("userID","1234");
我重定向到这样的IM
应用程序(在JSP上):
<a href="im.com/cng?q=1234">
IM
,在成功付款/交易重定向到我的申请后 - cng.com/receivePayment?p=4321
我的拦截器在每次检查会话中的userID的操作之前运行:
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
final ActionContext context = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse)context.get(StrutsStatics.HTTP_RESPONSE);
SessionMap<String,Object> sessionMap = (SessionMap<String,Object>)ActionContext.getContext().getSession();
String m = invocation.getInvocationContext().getName();
System.out.println(sessionMap.get("userID"));
return invocation.invoke();
}
当IM
重定向回CNG
时,拦截器会运行并打印null
,即我丢失了会话变量..