1

Web サービスに HTTP 基本認証を実装したいと考えていますが、資格情報を格納するために ObjectDB も使用したいと考えています。これを行う方法はありますか?私はカスタム レルムを必要としていると思います。また、誰かが以前にこれを行っているので、そうであれば手を挙げてください。それ以外の場合は、実装を手伝ってください。カスタム レルムの作成の基本は既に確認しました。どうにかして JDBCRealm で動作させることは可能ですか、それともより直接的に、ObjectDB サーバーを使用する GlassFish で JDBC リソースを作成することは可能ですか?

私がこれまでに行ったことは、のベースですRealm:

package objectdbrealm;

import com.sun.appserv.security.AppservRealm;
import com.sun.enterprise.security.auth.realm.BadRealmException;
import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;
import java.util.Enumeration;
import java.util.Properties;

public class ObjectDbRealm extends AppservRealm {

    @Override
    public void init(Properties properties) throws BadRealmException, NoSuchRealmException {
        //initialize the realm
    }

    @Override
    public String getAuthType() {
        return "ObjectDB Realm";
    }

    @Override
    public Enumeration getGroupNames(String string) throws InvalidOperationException, NoSuchUserException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

、およびLoginModule:

package objectdbrealm;

import com.sun.appserv.security.AppservPasswordLoginModule;
import com.sun.enterprise.security.auth.login.common.LoginException;

public class ObjectDbLoginModule extends AppservPasswordLoginModule {

    @Override
    protected void authenticateUser() throws LoginException {
        if (!authenticate(_username, _passwd)) {
            //Login fails
            throw new LoginException((new StringBuilder()).append("Login Failed for:").append(_username).toString());
        }
        String[] groups = getGroupNames(_username);
        commitUserAuthentication(groups);
    }

    private boolean authenticate(String username, char[] password) {
        /*
        Check the credentials against the authentication source,
        return true if authenticated, return false otherwise
         */
        return true;
    }

    private String[] getGroupNames(String username) {
        // Return the list of groups this user belongs to.
        return new String[0];
    }
}

アップデート

残念ながら、ObjectDB 用の JDBC ドライバーはまだないことが判明しました。ただし、お気軽に提案してください。

前もって感謝します!

4

3 に答える 3

1

直接的な答えではありませんが、Fish に付属しているかなり厳格な JDBCRealm に代わるものを提供する優れたFlexibleJDBCRealmがあります。これはオープン ソースであるため、そのコードを ObjectDB に適合させることは、レルムをゼロから実装するよりもはるかに簡単です。

于 2011-10-04T23:34:27.160 に答える
1

Objectdb を使用している場合、JDBC は必須ではありません。ObjectDb エンティティにアクセスしてログイン検証を実行するステートレス EJB をプロジェクトに作成できます。

private boolean authenticate(String username, char[] password) は、EJB クライアントを使用して資格情報の検証を実行できます。このは私にとってはうまくいきました。行う唯一の変更は、データモデルに ObjectDb エンティティを使用することです。改善として、インターフェイス IUserAuthenticationService を別の jar に配置して、実装の配布を回避できます。

それが役立つことを願っています。

Rn

于 2015-08-22T12:03:16.013 に答える
0

JDBCDriverObjectDBにはまだ何もないことが判明しました。自分で実装するには多すぎることがわかったので、待つだけです:)

于 2011-11-05T19:58:19.693 に答える