2016-11-02 20 views
3

いくつかの条件が満たされている場合、強制的にログアウトする必要があります。私はPostLoginActionフックを書いて条件をチェックし、条件が満たされたら​​を実行します。しかし、その後、アクティブなセッションがないので、Liferayはデフォルトで(フィルタを使用して)ログイン画面に私を連れて行きます。 /ROOT/html/common/内のエラーページの1つにリダイレクトしようとすると、という内部サーバーエラーページが不明瞭になります。この時点でLiferayでログアウトを強制した後にカスタムエラーページを表示

は、私はエラーメッセージを表示する必要があるが、すべてのリダイレクトは、ログインページで終わるされています。これを行う正しい方法は何でしょうか?ただ、サイドノートに

、ログインページ自体の代わりに、いくつかの他のページにリダイレクトするのエラーメッセージを表示する方法はありますか?私は同じ方法を達成するためにsessionErrors.add()メソッドを使用しようとしましたが、それも働いていません。

詳細が必要な場合はお知らせください。

+1

は、私はそれが権利を取得ください - あなたはユーザーがログインした後にユーザー_immediately_をログアウトしたいですか?現在の 'PostLoginAction'を追加して問題をより良く説明できますか? –

+1

liferayで "login.events.pre"フックを作成し、アクションクラスでユーザーセッションを無効にしてみましたか? –

+0

@TobiasLiefke - 私のコードは、以下の答えで与えられているものとほとんど同じです。 – buch11

答えて

1

この

  1. を達成するために、以下の手順に従ってくださいポストのログインイベント・フックのプラグインを作成
  2. 与えられた小道具

    login.events.post = comのとportal.propertiesを作成します。 liferay.sample.hook.LoginActionRedirect

  3. エントリをl iferay-hook.xml

    portal.properties

  4. ロケールでリダイレクトを回避するために、portal-ext.propertiesファイルに次のプロパティを追加し、クラスLoginActionRedirect

    package com.liferay.sample.hook; 
    
    import java.io.IOException; 
    
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    
    import com.liferay.portal.kernel.events.Action; 
    import com.liferay.portal.kernel.events.ActionException; 
    
    public class LoginActionRedirect extends Action { 
    
    @Override 
    public void run(HttpServletRequest req, HttpServletResponse res) 
         throws ActionException { 
        System.out.println("Invalidating user"); 
        req.getSession().invalidate(); 
        try { 
         //Use page URL to be redirected 
         res.sendRedirect(req.getContextPath()+"/web/guest/WCM"); 
        } catch (IOException e) { 
    
         System.out.println("Something went wrong while performing IO operations"); 
        } 
    } 
    

    }

  5. を作成します。前置き

    locale.prepend.friendly.url.s tyle = 0

+0

これはまさに私がやっていることですが、私の質問は、 "/ web/guest/WCM"の下にカスタムHTMLを置くかどうか、また状況を処理する有効/最善の方法があるかどうかです。 – buch11

+0

私は現在response.sendRedirect( "/ html/common/loginBreaker。html ");そして、htmlをwebapps/ROOT/html/common/liferayインストールのフォルダに置きました。 – buch11

+0

@ buch11ポータルのカスタム作成ページでWebコンテンツを使用するのは、以下の理由により優れたアプローチです。任意のコンテンツやページの変更の場合は、サーバーを再起動する2)変更は簡単に展開することができますまたはフックを使用して直接サーバーからプルアップ。私はさらに懸念を知らせてください。 –

関連する問題