TomEE dostęp do EJB

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.

0

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

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:

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?

0

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

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.

0

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

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1