我的經驗是你不能用這種方式創建一個帶有嵌入式glassfish的安全領域。原因是你需要啓用安全管理。當然,您可以在嵌入式glassfish中啓用secure-admin,但需要重新啓動。這就是要點,通常你不能重新啓動嵌入式glassfish,因爲你將失去狀態,所以你也會失去配置的安全領域。
奇怪的是我期望只是一個失敗的登錄,而不是失蹤的loginmodules-exception Oo。
好消息,這是另一種方式,你可以嘗試哪些可能有所幫助。 如果您使用EJBContainer.createEJBContainer(props);
創建EJBContainer,則可以傳遞一些屬性和屬性,我們可以使用它們。這看起來像下面這樣:
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "./src/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());
拿你改變護理服務器的端口,所以如果另一個glassfish實例正在運行,你不會得到一個錯誤。你也應該去掉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);'