1

Liferay 自動ログインとカスタム認証についてサポートが必要です。

私の目標は、ヘッダー (異なる認証フレームワークによって入力されたもの) から資格情報を取得してから、自動ログインすることです。ユーザーのログイン時にいくつかのサービスを呼び出す必要もあります。

私はいくつかのドキュメントを読みました ( http://www.liferay.com/community/wiki/-/wiki/Main/Developing+a+Custom+Authentication+Systemのドキュメントも参照)が、まだ理解できません。

portal.properties でフックを実行しました。

auto.login.hooks=it.mypackage.filter.AutoLoginFilter

そしてクラス:

public class AutoLoginFilter implements AutoLogin {


    public AutoLoginFilter() {
        super();
    }

    @Override
    public String[] login(HttpServletRequest req, HttpServletResponse arg1) throws AutoLoginException {
        String[] credentials = new String[] { "test@liferay.com" };
        return credentials;
    }
}

クラス AutoLogin の例では、ユーザー名のみを返すと想定しています (他の資格情報を確認する必要はありません)。

次に、portal-ext.properties で ext を作成します。

auth.pipeline.pre=it.mypackage.auth.MyAuthenticator
auth.pipeline.enable.liferay.check=false

およびオーセンティケータ:

public class MyAuthenticator implements Authenticator {

    private static Log _log = LogFactory.getLog(SwaFiamAuthenticator.class);

    @Override
    public int authenticateByEmailAddress(long companyId, String emailAddress, String password,
            Map<String, String[]> headerMap, Map<String, String[]> parameterMap) throws AuthException {
        return authenticate();
    }

    @Override
    public int authenticateByScreenName(long companyId, String screenName, String password,
            Map<String, String[]> headerMap, Map<String, String[]> parameterMap) throws AuthException {
        return authenticate();
    }

    @Override
    public int authenticateByUserId(long companyId, long userId, String password, Map<String, String[]> headerMap,
            Map<String, String[]> parameterMap) throws AuthException {
        return authenticate();
    }

    protected int authenticate() {
        _log.debug("returning SUCCESS");
        return SUCCESS;
    }

}

コードに期待することは次のとおりです。

ポータルに入るすべてのユーザーは、ログイン ページを表示せずに自動的に認証され、ユーザー「test@liferay.com」として認識されます。

私が得るもの:

AutoLoginFilter.login が呼び出されますが、ユーザーは引き続きログイン ページにリダイレクトされます。MyAuthenticator は呼び出されませんでした (AutoLogin-hook を削除し、auth.pipeline.enable.liferay.check=false プロパティも削除した場合にのみ呼び出されます)。

手伝ってくれてありがとう。

4

1 に答える 1

5

返される配列には、最初に userId が含まれている必要があります。次のようなものが機能する必要があります。

            String[] credentials = new String[3];
            credentials[0] = userId;
            credentials[1] = "undefined";
            credentials[2] = Boolean.FALSE.toString();

[コントロール パネル] -> [ユーザー] -> [...] で見つけることができる userId

または(より良い方法)プログラムでロードしますUserLocalServiceUtil.getUserByEmailAddress(companyId, emailAddress);

これauth.pipelineは、このアプローチには必要ありません。

于 2012-05-21T22:57:38.043 に答える