2011-10-04 8 views
1

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

То, что я сделал до сих пор является базой 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

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

Заранее благодарен!

ответ

0

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

1

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

1

JDBC не является обязательным, если вы используете Objectdb. Вы можете создать Stateless EJB в вашем проекте, что доступ к вашему ObjectDB организаций для выполнения Логина validation.The вашего метода

частных логических Аутентифицировать (String имени пользователя, символ [] пароль) может использовать клиент EJB для выполнения учетные данные. Этот example работал отлично для меня. Единственное изменение, которое нужно сделать, это использование ваших объектов ObjectDb для datamodel, и в качестве улучшения вы можете поместить интерфейс IUserAuthenticationService в отдельную банку, чтобы избежать распространения реализации.

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

Rn

 Смежные вопросы

  • Нет связанных вопросов^_^