2011-10-04 3 views
1

웹 서비스에 HTTP 기본 인증을 구현하려고하지만 ObjectDB를 사용하여 자격 증명을 저장하려고합니다. 이 일을 할 수있는 방법이 있습니까? 나는 커스텀 영역이 필요하다고 생각합니다. 누군가 이미 이미 그렇게 했으므로, 그렇다면 손을 들어주세요. 그렇지 않으면 구현을 도와주세요. 이미 맞춤 영역을 만드는 기본 사항을 확인했습니다. 어떻게 든 JDBCRealm과 작동하도록 만들 수 있습니까? 아니면 더 직접적으로 GlassDB에서 ObjectDB 서버를 사용하는 JDBC 리소스를 만들 수 있습니까?ObjectDB에 대한 사용자 지정 영역, HTTP 기본 인증과 함께 ObjectDB 사용

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 드라이버가 없음을

슬프게도

it turned out 내가 지금까지 무슨 짓을

는하여 Realm의 기지 ObjectDB가 아직 없습니다. 그러나 제안을하는 것이 자유롭게 느껴 져라!

미리 감사드립니다.

답변

0

It turned out 아직 ObjectDB에 대해 JDBCDriver이 없다. 내 자신을 구현하기에는 너무 많은 것을 발견했기 때문에 기다려야합니다.

1

직접적인 대답은 아니지만 Fish와 함께 제공되는 다소 엄격한 JDBCRealm의 대안 인 우수 FlexibleJDBCRealm이 있습니다. 오픈 소스이기 때문에 코드를 ObjectDB에 적용하는 것은 처음부터 영역을 구현하기 시작하는 것보다 훨씬 쉬워야합니다.

1

JDBC는 반드시 Objectdb를 사용하고있는 것이 아닙니다. 당신은 로그인이 방법

개인 부울 인증합니다 validation.The 수행하기 위해 ObjectDb 개체에 액세스 프로젝트에 비 저장 EJB를 만들 수 있습니다 (문자열 사용자 이름, 숯불 [] 비밀번호) 은을 수행하기위한 EJB 클라이언트를 사용할 수 있습니다 자격 증명 유효성 검사. 이 example은 저에게 잘 맞았습니다. 유일하게 변경해야 할 것은 Datamodel에 ObjectDb 엔티티를 사용하는 것입니다. 인터페이스 IUserAuthenticationService를 구현하면 배포를 피하기 위해 별도의 jar에 인터페이스를 추가 할 수 있습니다.

희망이 있습니다.

nn