跟踪并做了如下的一组测试(Liferay和webapp在不同的JVM环境下):
应用
|
位置
|
session id
|
(Liferay)
|
执行form post前
|
D03E1B828395EF5BCB1063A8290BD254
|
(APP_A)
|
Login操作
|
397BB3656E2A12A96CE3F16E0A89C607
|
(APP_A)
|
登陆后的新页面
|
58A1054C6EDE4A7D6CFA2FCDBB3E0736
|
从上面可以明显看出来,redirect之后,web应用的新页面产生了新的sessionid
解决这个问题,有两种方式,这两种方式都依赖于被liferay portlet纳入的web应用自身。
方式一:Login操作后,不采用Redirect方式,而是Dispatcher方式。
方式二:Login操作后,依然采用redirect方式,但将当前的jsessionid赋予新的页面。
Dispatcher方式:
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
|
Redirect方式(保持同一个session):
response.sendRedirect(“
;jsessionid=397BB3656E2A12A96CE3F16E0A89C607”)
|
有一种情况下,无所谓是否采用Redirect方式,这就是在Liferay和webapp在同一个JVM环境下。