Liferay:Autologinフックで最初にログアウトを強制する方法

StackOverflow https://stackoverflow.com/questions/4470130

  •  11-10-2019
  •  | 
  •  

質問

見かけ上、Liferayは、再度ログインしようとしている場合、現在ログインしているユーザーにログインしていません。実際、ログインしているユーザーがログインしています。ログアウトを強制しようとしています。

私は試した:

request.getSession().invalidate();

しかし、それはログイン機能を何らかの形で破る以外に機能しないようです。

ログアウトを強制する方法が他にアイデアを持っているかどうか疑問に思っていました。

編集:

try {
            HttpSession session = request.getSession();

            EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_PRE,
                    PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_PRE), request, response);

            String domain = CookieKeys.getDomain(request);

            Cookie companyIdCookie = new Cookie(CookieKeys.COMPANY_ID,
                    StringPool.BLANK);

            if (Validator.isNotNull(domain)) {
                companyIdCookie.setDomain(domain);
            }

            companyIdCookie.setMaxAge(0);
            companyIdCookie.setPath(StringPool.SLASH);

            Cookie idCookie = new Cookie(CookieKeys.ID, StringPool.BLANK);

            if (Validator.isNotNull(domain)) {
                idCookie.setDomain(domain);
            }

            idCookie.setMaxAge(0);
            idCookie.setPath(StringPool.SLASH);

            Cookie passwordCookie = new Cookie(CookieKeys.PASSWORD,
                    StringPool.BLANK);

            if (Validator.isNotNull(domain)) {
                passwordCookie.setDomain(domain);
            }

            passwordCookie.setMaxAge(0);
            passwordCookie.setPath(StringPool.SLASH);

            CookieKeys.addCookie(request, response, companyIdCookie);
            CookieKeys.addCookie(request, response, idCookie);
            CookieKeys.addCookie(request, response, passwordCookie);

            try {
                session.invalidate();
            } catch (Exception e) {
            }

            EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_POST,
                    PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_POST), request, response);
        } catch (Exception e) {
            try {
                PortalUtil.sendError(e, request, response);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (ServletException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

Cookiekeys/processorserviceutil/...より多くのベースレベルに置き換えることに応じて、noclassdeffounderrorsを提供します。 (procesorserviceutilから関数コードをコピーして、proccesorserviceutilからコピーして、processorserviceutilと同様)。

役に立ちましたか?

解決

1)session.invalidate()は、認証がアプリケーションサーバーセッションによって管理されている場合にのみ機能します。

2)Community EditionまたはEnterprise Editionを使用するかどうかに関係なく、必要なものを達成するのに十分なソースコードが必要です

3)Portal-Ext.Propertiesは、ログインチェーンとロジン前のフックをサポートしています

4)ログアウトコールcom.liferay.portal.action.logoutactionのロジックの束を含むが、エンディングを台無しにすることなく、他のLiferay認証パーツが失われるのに十分であるはずです。

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top