登录成功后续订JSESSIONID

问题描述 投票:1回答:1

我想,当用户登录正确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 jboss liferay hook jsessionid
1个回答
0
投票

你并不需要在自己的代码添加逻辑来提供这一点。你只需要确保您的属性文件这一功能。

session.enable.phishing.protection = true

这是所有给它。你不会然而,能够检测到这个样子,作为控制返回到Liferay后的会议将被更新,这意味着你将需要第二个钩后登录验证ID被改变(或者你可以简单地检查在浏览器的cookie视图)。

关于自己的实现此功能:

对于请求#的getSession的Javadoc:

返回与此请求关联的HttpSession的电流,或者如果没有当前会话,并创建为true,则返回一个新的会话。

如果制作的是虚假的,该请求没有有效的HttpSession,此方法返回null。

为了确保会议正常维护,你必须在响应被提交之前调用此方法。如果容器使用cookies来维护会话的完整性,并询问何时响应致力于创建一个新的会话,则抛出IllegalStateException。

© www.soinside.com 2019 - 2024. All rights reserved.