TomEE dostęp do EJB

TomEE dostęp do EJB
AB
  • Rejestracja: dni
  • Ostatnio: dni
0

TomEE po ustawieniu opcji tomee.remote.support = true umożliwia zdalny dostęp do EJB. To samo można też włączyć we własnej aplikacji dodając w web.xml servlet org.apache.openejb.server.httpd.ServerServlet.

Moje pytanie. Jak ten servlet zmusić aby do autoryzacji używał inny Realm niż pierwszy zdefiniowany w konfiguracji TomEE (conf/server.xml)? Chciałbym Realm definiować we własnej aplikacji i tylko dla tej aplikacji.

JM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Słabo pamiętam, ale tomcatowy realm nie ma wiele wspólnego z EJB, to cecha zwykłego Tomcata

AB
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli wszystko dobrze rozumiem to:

Gdy we własnej aplikacji w web.xml zdefiniuje <security-constraint>, <login-config>, itd, to żeby wyświetlić w przeglądarce określony servlet będę musiał się zalogować, korzystając z Realm Tomcata.

W Tomcacie Realm można definiować w conf/server.xml, conf/context.xml i we własnej aplikacji w META-INF/context.xml. Z punktu widzenia własnej aplikacji każdy kolejny zastępuje poprzedni.

TomEE dodatkowo obsługuje EJB, które po drobnej konfiguracji można też udostępnić zdalnie. Jeśli Bean ma @RolesAllowed("SomeRole") to muszę się wcześniej zalogować aby go użyć.

Chce w zwykłej konsolowej aplikacji wykonać zdalnie ten Bean czy robię coś takiego:

Kopiuj
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "http://localhost:8080/tomee/ejb");
p.put(Context.SECURITY_PRINCIPAL, "someUsername");
p.put(Context.SECURITY_CREDENTIALS, "somePassword");
InitialContext ic = new InitialContext(p);
BeanRemote bean = (BeanRemote) ic.lookup("BeanRemote");
bean.callSomeMethod();

To wszystko działa ale zawsze użyje Realm z conf/server.xml, niby logiczne bo to (/tomee/ejb) uruchamia TomEE. Ale można też we własnej aplikacji uruchomić ten servlet (org.apache.openejb.server.httpd.ServerServlet) i zamiast /tomee/ejb bedzie /my_context_path/ejb_endpoint (czy co tam ustawię). Jednak w dalszym ciągu użyje to Ream z conf/server.xml mimo że w META-INF/context.xml jest inny.

Nie uwierzę że nie ma jakiegoś prostego sposobu na określenie Realm dla tego mechanizmu. Jakieś sugestie?

JM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

jesteś ar ju kompletli siur, że chcesz używać tej dinozaurowej technologii?

AB
  • Rejestracja: dni
  • Ostatnio: dni
1

@J.Muzykant: Jestem Pewien na 100%. Po prostu mam starą aplikację klient (Swing) serwer (EJB) a za leniwy jestem aby poprawiać coś co działa.

AB
  • Rejestracja: dni
  • Ostatnio: dni
0

Ok, udało się. Wystarczyło ustawić:

Kopiuj
p.put("openejb.authentication.realmName","web-application-context-path");

i wtedy TomEE użyje Realm z META-INF/context.xml

Kopiuj
<Context path="/web-application-context-path">
   <Realm .../>
</Context>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.