我想,当用户登录正确JSESSIONID ID发生了变化。
我有我自己的钩子来处理与AutologinTokenClient库(first_hook),另一个钩自动登录,以验证用户是管理员,它重定向到管理面板(second_hook)。
我的配置:
JBOSS: jboss-eap-6.4
Liferay Portal Enterprise Edition 6.2.10 EE GA1
我尝试添加标签的,我在第1钩(first_hook)已经修改了的login.jsp。但它始终是相同的ID。
<% @ page session = "false"%>
在first_hook我有一些方法postlogin类,我试图把下面的函数,但我每次执行它时,我得到了会议的,我要重新登录。
private void renewSessionID (HttpServletRequest request)
{
LOG.info ("--------------------------------------------------------------------");
HttpSession oldSession = request.getSession (true);
LOG.info("OLD_SESSION: "+oldSession.getId ());
Enumeration attrNames = oldSession.getAttributeNames ();
Properties props = new Properties ();
if (attrNames != null)
{
while (attrNames.hasMoreElements ())
{
String key = (String) attrNames.nextElement ();
props.put (key, oldSession.getAttribute (key));
}
// Invalidating previous session
oldSession.invalidate ();
// Generate new session
HttpSession newSession = request.getSession (true);
attrNames = props.keys ();
while (attrNames.hasMoreElements ())
{
String key = (String) attrNames.nextElement ();
newSession.setAttribute (key, props.get (key));
}
LOG.info ("NEW_SESSION: "+newSession.getId ());
}
}
和错误如下:
Caused by: java.lang.IllegalStateException: JBWEB000043: Can not create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession (Request.java:2649)
at org.apache.catalina.connector.Request.getSession (Request.java:2382)
我也分别尝试以下文本行添加到portal-ext.properties文件,但它不会改变任何东西:
session.enable.phishing.protection = true
session.phishing.protected.attributes = CAS_LOGIN, HTTPS_INITIAL, LAST_PATH, OPEN_ID_CONNECT_SESSION
任何想法?
你并不需要在自己的代码添加逻辑来提供这一点。你只需要确保您的属性文件这一功能。
session.enable.phishing.protection = true
这是所有给它。你不会然而,能够检测到这个样子,作为控制返回到Liferay后的会议将被更新,这意味着你将需要第二个钩后登录验证ID被改变(或者你可以简单地检查在浏览器的cookie视图)。
关于自己的实现此功能:
对于请求#的getSession的Javadoc:
返回与此请求关联的HttpSession的电流,或者如果没有当前会话,并创建为true,则返回一个新的会话。
如果制作的是虚假的,该请求没有有效的HttpSession,此方法返回null。
为了确保会议正常维护,你必须在响应被提交之前调用此方法。如果容器使用cookies来维护会话的完整性,并询问何时响应致力于创建一个新的会话,则抛出IllegalStateException。