Doświadczenie, którego dokonałem, polega na tym, że nie można w ten sposób stworzyć sfery bezpieczeństwa z osadzoną szklaną rybką. Powodem jest to, że potrzebujesz bezpiecznego administratora. Oczywiście, możesz włączyć bezpieczną admin w osadzonym glassfish, ale to wymaga ponownego uruchomienia. I o to chodzi, zwykle nie można ponownie uruchomić osadzonego glassfish, ponieważ stracisz stan, abyś również stracił skonfigurowaną dziedzinę bezpieczeństwa.
Dziwne jest to, że oczekiwałbym tylko nieudanego logowania, a nie brakującego loginu Oo.
Dobra wiadomość, jest inny sposób, który można wypróbować, co może pomóc. Jeśli użyjesz EJBContainer.createEJBContainer(props);
do utworzenia elementu EJBContainer, możesz przekazać kilka właściwości i jedną właściwość, której możemy użyć. To będzie wyglądać następująco:
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "./src/test/resources/testing-domain");
Teraz możesz określić całą swoją domenę testową w swoich zasobach testowych. W tym celu należy skopiować pewne rzeczy z działającego samodzielnego Glassfish 3.1.2.2. I zorientowali się, potrzebne są następujące środki w celu dostosowania go do pracy:
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
Jeśli pomocą GlassFishRuntime.bootstrap().newGlassFish(glassfishProperties);
po prostu trzeba się domain.xml i ten fragment:
GlassFishProperties glassfishProperties = new GlassFishProperties();
File configFile = new File("src/test/resources/META-INF", "domain.xml");
glassfishProperties.setConfigFileURI(configFile.toURI().toString());
zadbać, aby zmienić porty serwera, więc nie otrzymasz błędu, jeśli uruchomiona jest kolejna wersja glassfish. Powinieneś również usunąć plik domain.xml, aby przyspieszyć testy.
Teraz można określić security-sferę w domain.xml pod tag <security-service>
wkładki coś takiego:
<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>
to wszystko, łatwa robota, huh? ; D
Uwaga: Jeśli chcesz, możesz określić LoginModules w pliku login.conf.
Uwaga2: Zakładam, że myRealm (bez cudzysłowów) jest literówką w tym poleceniu? -> 'glassfish.getCommandRunner(). run ("create-auth-realm", "--classname", "com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm", "--property", realmProperties , myRealm); "