Пользовательская область для ObjectDB, использующая ObjectDB с базовой аутентификацией HTTP - PullRequest
1 голос
/ 05 октября 2011

Я хочу реализовать базовую аутентификацию HTTP для моих веб-сервисов, но я также хочу использовать ObjectDB для хранения учетных данных. Есть какой-либо способ сделать это? Я думаю, что мне нужен пользовательский мир, а также, что кто-то уже делал это раньше, так что если да, пожалуйста, поднимите руки. В противном случае, пожалуйста, помогите мне с реализацией. Я уже проверил основы создания пользовательских сфер. Можно ли как-то заставить его работать с JDBCRealm или, более напрямую, возможно ли создать ресурс JDBC в GlassFish, который использует сервер ObjectDB?

То, что я до сих пор делал, это основа 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];
    }
}

UPDATE

К сожалению оказалось , что еще нет драйвера JDBC для ObjectDB. Не стесняйтесь делать предложения, однако!

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 22 августа 2015

JDBC не является обязательным, если вы используете Objectdb.Вы можете создать EJB без сохранения состояния в вашем проекте, который обращается к вашим объектам ObjectDb для выполнения проверки входа в систему. Ваш метод

private boolean authenticate (String username, char [] password) может использовать клиент EJB длявыполнить проверку учетных данных.Этот пример работал для меня нормально.Единственное изменение, которое нужно сделать, - это использование объектов ObjectDb для модели данных, а в качестве улучшения вы можете поместить интерфейс IUserAuthenticationService в отдельный jar, чтобы избежать распределения реализации.

Надеюсь, что это поможет.

Rn

1 голос
/ 05 октября 2011

Не прямой ответ, но есть превосходный FlexibleJDBCRealm , который предлагает альтернативу довольно жесткому JDBCRealm, который поставляется с Fish.Это открытый исходный код, адаптация этого кода к ObjectDB должна быть намного проще, чем начинать реализовывать область с нуля.

0 голосов
/ 05 ноября 2011

Оказалось , что для ObjectDB пока нет JDBCDriver. Я нашел слишком много, чтобы реализовать свой собственный, так что я просто подожду :)

...