0

Liferay6.1バージョンを使用しています。

ユーザーが入るhttp:localhostと、次のようにカスタムポータルで構成される「/ravi」というWebページが表示されます。

示されているように、portal-ext.propertiesの下のプロパティの下でこれを構成しました

auth.forward.by.last.path=true
default.landing.page.path=/web/guest/ravi

ユーザーがhttp:localhostと入力したときに表示されるカスタムポートレットのスクリーンショットを参照してください。

ここに画像の説明を入力してください

今、私の要件は、彼が有効なクレンデンテイルを入力した場合、別のページ( "/ web / guest / test")を表示する必要があることです。

私のprocessActionクラスでは、このようにしています

public class ValidateUser extends MVCPortlet {
    public void processAction(ActionRequest request, ActionResponse response) {

        String userName = (String) request.getParameter("userName");
                String password = (String) request.getParameter("password");
        try {
//  Contatcs DB and validates the credentials here 
// Please let me know how can i show the Configured Page if his credentials are valid ??
        } 
               catch (Exception e) {
        }

    }


}

編集部

デフォルトのlogin.events.postに関する回答ありがとうございます。

私はLiferayを初めて使用するので、ここで間違いを犯している可能性があります。何か間違ったことをしている場合は、助けてください。

私はこれらの手順に従いました:

  1. 「MyLogon」ポートレットという名前の新しいポートレットを作成し、そのview.jspで、2つのテキストフィールド(ログインとパスワード)と送信ボタンを持つフォームを作成しました。その送信ボタンをクリックすると、実際にprocessActionメソッドを呼び出し、mysqldbからユーザーを検証するためのDB呼び出しを行っていました。

2.次に、/ web / guest / ravi内にページを作成し、この「MyLogon」ポートレットをこの新しいページ/ web / guest/raviに追加しました。

  1. 次に、以下のプロパティでこれを構成しますportal-ext.properties

    auth.forward.by.last.path = true default.landing.page.path = / web / guest / ravi

これは私がしたことです。

そして、入るhttp:localhost:8080と、ページが表示されます。

私が何か間違ったことをしている場合は教えてください

第二部編集

私はあなたの答えの一部を理解しました、そして私はこれらの質問があります。手伝ってもらえますか

データベース内に存在するデータに基づいてユーザーを検証する必要があるため、このために以下のシンを実行する必要があります。

  1. このプロパティを上書きするには、フックを作成する必要があります

    login.events.pre = com.LoginAction

    パブリッククラスLoginActionはAction{を拡張します

    public void run(HttpServletRequest req, HttpServletResponse res) {
    

    //ここで、ユーザー資格情報を検証するためにデータベース呼び出しを行い、次にユーザーを目的のページにリダイレクトする必要がありますか?

    }
    

    }

4

1 に答える 1

1

フックを作成し、デフォルトのlogin.events.postをオーバーライドする必要があります

参考までに以下のコード、

public class LandingPageAction extends Action {
    public LandingPageAction()
        {

        }
 public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException
  {
      try
      {
          doRun(request, response);
      }
      catch(Exception e)
      {
          throw new ActionException(e);
      }
  }

protected void doRun(HttpServletRequest request, HttpServletResponse response) throws Exception
  {
String homeRedirect="/web/guest/test";
LastPath lastPath = new LastPath(StringPool.BLANK, homeRedirect); 
session.setAttribute("LAST_PATH", lastPath);
  }
}

ここでわからないことがいくつかあります。localhost:8080を押していますが、スクリーンショットには、すでにログインしていることが示されています(SignOutリンクがあり、ユーザーRavi Kiranはすでにログインしています)が、ログインページが表示されています。

default.landing.page.pathログインしたユーザーの画像が表示されます。localhost:8080またはlocalhost / web / guest / Raviをヒットしていますか?まだログインしていないため、/ web / guest/Raviにリダイレクトしないでください。

Liferayでデフォルトの認証コードを再利用できます。リクエストパラメータからユーザークレデンシャルを取得し、DBに自分で呼び出させる理由がわかりません。

質問の更新に従って編集

1.Liferayのデフォルトのログインページ(新たにダウンロードしてlocalhost:8080を押すと表示されるページは、このパスから取得されます ..\default\deploy\ROOT.war\html\portlet\login。このパスには、login.jsp編集して独自のルックアンドフィールを与えることができるがあります。以下のエントリを参照してください。このlogin.jspページ <portlet:param name="struts_action" value="/login/login" />

これには、.. / deploy / ROOT.war / WEB-INF/struts-config.xmlに対応するエントリがあります。

<action path="/login/login" type="com.liferay.portlet.login.action.LoginAction">
    <forward name="portlet.login.login" path="portlet.login.login" />
</action>

com.liferay.portlet.login.action.LoginActionソースコードを開いてメソッドを調べることができます。passwords.encryption.algorithm=これにより、ファイル内のpasswords.digest.encoding= 構成に従って基本認証が実行されportal-ext.propertiesます。LoginAction基本認証を実行し、で説明したパスに従ってすべてのユーザーをリダイレクトしますdefault.landing.page.path= 。(一部の)ユーザーを(条件付きで)他のパスにリダイレクトする場合は、フックを記述して上記のコードを使用できます。

2.認証されると、ログインしてページ(この場合は「ravi」)を作成できます。このページにカスタムポートレットを追加できます。すでにログインしていると認証を行うcutomポートレットを作成しないでください

于 2013-02-25T06:51:40.893 に答える