2011-06-21 9 views
2

グラスフィッシュでカスタムレルムを使用したい3.1カスタムレルムをGlassFish 3.1で使用するにはどうすればよいですか?

このトピックの2つのファイルを試しました。 Custom Glassfish Security Realm does not work (unable to find LoginModule)

CustomRealm.java

package com.company.security.realm; 
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; 
import java.util.Vector; 

public class CustomRealm extends AppservRealm 
{ 
Vector<String> groups = new Vector<String>(); 

private String jaasCtxName; 

private String startWith; 

@Override 
public void init(Properties properties) 
throws BadRealmException, NoSuchRealmException { 
    jaasCtxName = properties.getProperty("jaas-context", "customRealm"); 
    startWith = properties.getProperty("startWith", "z"); 
    groups.add("dummy"); 
} 

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

public String[] authenticate(String username, char[] password) 
{ 
    // if (isValidLogin(username, password)) 
    return (String[]) groups.toArray(); 
} 

@Override 
public Enumeration getGroupNames(String username) 
throws InvalidOperationException, NoSuchUserException 
{ 
    return groups.elements(); 
} 

@Override 
public String getJAASContext() 
{ 
    return jaasCtxName; 
} 

public String getStartWith() 
{ 
    return startWith; 
} 
} 

とカスタムログインモジュール

package com.company.security.realm; 

import com.sun.appserv.security.AppservPasswordLoginModule; 
import com.sun.enterprise.security.auth.login.common.LoginException; 
import java.util.Set; 
import org.glassfish.security.common.PrincipalImpl; 

public class CustomLoginModule extends AppservPasswordLoginModule 
{  
    @Override 
protected void authenticateUser() throws LoginException 
{ 
    _logger.info("CustomRealm : authenticateUser for " + _username); 
    final CustomRealm realm = (CustomRealm)_currentRealm; 

    if ((_username == null) || (_username.length() == 0) || !_username.startsWith(realm.getStartWith())) 
     throw new LoginException("Invalid credentials"); 

    String[] grpList = realm.authenticate(_username, getPasswordChar()); 
    if (grpList == null) { 
     throw new LoginException("User not in groups"); 
    } 

    _logger.info("CustomRealm : authenticateUser for " + _username); 

    Set principals = _subject.getPrincipals(); 
    principals.add(new PrincipalImpl(_username)); 

    this.commitUserAuthentication(grpList); 

} 
} 

私は

customRealm { 
com.company.security.realm.CustomLoginModule required; 
}; 

confファイルに同様のモジュールを追加し、私は私の2をコピーします.glassfish3/glassfish/domains/domain1/lib/classes/のクラス3210だけでなく、glassfish3/glassfish/lib

毎回新しい領域を作成したいのですが、同じエラーがあります。

./asadmin --port 4949 create-auth-realm --classname com.company.security.realm.CustomRealm --property jaas-context=customRealm:startWith=a customRealm  

remote failure: Creation of Authrealm customRealm failed. com.sun.enterprise.security.auth.realm.BadRealmException: java.lang.ClassNotFoundException: com.company.security.realm.CustomRealm not found by org.glassfish.security [101] 

com.sun.enterprise.security.auth.realm.BadRealmException: java.lang.ClassNotFoundException: com.company.security.realm.CustomRealm not found by org.glassfish.security [101] 
Command create-auth-realm failed. 

私は本当に自分の2つのファイルをglassfishに適切な方法で追加する方法を理解していないと思います。

この2つのファイルは、Eclipseから作成され、コンパイルされます。私はjavaプロジェクトのsuctomログインを作成します。

誰かが役に立ちますか?

Thxを事前に多く、 ロイック

答えて

0

あなたはOSGiのモジュール(あなたが参照記事で答えを参照)としてそれをパッケージ化しましたか?その場合は、LIBまたは何か$ GF_HOME /にjarファイルをコピーしません、代わりに、OSGiのモジュールとしてデプロイ:

asadmin deploy --type osgi /path/to/CustomRealm.jar

その後はlogin.confの設定を追加します。安全な側にいるために、私はGF(asadmin restart-domain)を再起動し、あなたがそこに持っているコマンドで領域を作成することができます。

+1

こんにちは、試してみましたが、唯一の問題は、OSGIバンドルとして展開したときにJarファイルが見つからないということです。完全なクラスパスを使用する代わりに、適切な方法があります。 –

関連する問題