私が経験したことは、この方法ではグラスフィッシュが埋め込まれたセキュリティレルムを作成できないということです。その理由は、secure-admin を有効にする必要があるためです。もちろん、組み込みのグラスフィッシュで secure-admin を有効にすることはできますが、それには再起動が必要です。それがポイントです。通常、埋め込まれたグラスフィッシュを再起動することはできません。これは、状態が失われ、構成されたセキュリティ レルムも失われるためです。
奇妙なことに、loginmodules-exception Oo の欠落ではなく、ログインの失敗だけが予想されます。
良いニュースです。おそらく役立つ別の方法があります。EJBContainer.createEJBContainer(props);
EJBContainer を作成するために使用する場合、いくつかのプロパティを渡すことができ、使用できるプロパティが 1 つあります。次のようになります。
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "./src/test/resources/testing-domain");
test-resources で testing-domain 全体を指定できるようになりました。そのためには、動作中のスタンドアロン Glassfish 3.1.2.2 からいくつかのものをコピーする必要があります。それを機能させるには、次のリソースが必要であることがわかりました。
testing-domain
config
admin-keyfile
cacerts.jks
domain.xml (there u can define the security-realm)
keyfile
keystore.jks
logging.properties
login.conf
server.policy
wss-server-config-1.0.xml
wss-server-config-2.0.xml
を使用している場合はGlassFishRuntime.bootstrap().newGlassFish(glassfishProperties);
、domain.xml と次のスニペットが必要です。
GlassFishProperties glassfishProperties = new GlassFishProperties();
File configFile = new File("src/test/resources/META-INF", "domain.xml");
glassfishProperties.setConfigFileURI(configFile.toURI().toString());
サーバーのポートを変更するように注意してください。別のグラスフィッシュ インスタンスが実行されている場合にエラーが発生することはありません。また、テストを少し高速化するために domain.xml を削除する必要があります。
<security-service>
これで、domain.xml のタグ挿入の下に、次のようにセキュリティ レルムを指定できます。
<auth-realm name="JDBC-AccountRealm" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
<property name="jaas-context" value="jdbcRealm"></property>
<property name="password-column" value="PASSWORD"></property>
<property name="datasource-jndi" value="jdbc/__default"></property>
<property name="group-table" value="ACCOUNT_GROUP"></property>
<property name="user-table" value="ACCOUNT"></property>
<property name="group-name-column" value="GROUPS"></property>
<property name="group-table-user-name-column" value="EMAIL"></property>
<property name="user-name-column" value="EMAIL"></property>
<property name="digest-algorithm" value="SHA-256"></property>
<property name="encoding" value="Hex"></property>
</auth-realm>
それだけです、簡単ですよね?;D
注: 必要に応じて、login.conf で LoginModules を指定できます。
注 2: myRealm (引用符なし) はそのコマンドのタイプミスだと思いますか? -> 'glassfish.getCommandRunner().run("create-auth-realm", "--classname", "com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm", "--property", realmProperties 、myRealm);'