kwyjibo_84
Mitglied
Hallo zusammen,
ich würde gerne in einer Stateless-Session-Bean das Principal eines angemeldeten Benutzers auslesen.
ich bekomme aber immer eine Exception sobald ich versuche das Principal aufzurufen:
Mein Client schaut so aus:
Ich hab mir mein eigenes JAAS-LoginModul gebastelt und da kann ich mir auch mein Subject holen (Hinweis: auf ein Passwort wird nicht geprüft, es wird nur der Benutzername im Principal abgelegt):
Nun will ich die Stateless-Session-Bean aufrufen. Dafür dachte ich, muss ich folgendes machen:
bei doSth bzw. getCallerPrincipal wird aber dann immer die IlligalStateException geworfen.
Was mach ich da falsch?
Müsste ich das eher mit org.jBoss.security.jndi.LoginInitialContextFactory machen? Wie würde das funktionieren?
Eigentlich ist mein Ziel nur, in einer Stateless-Session-Bean herauszufinden, wie der Benutzer heißt, der sich angemeldet hat. Gibt es da vielleicht einen anderen/besseren Weg als über den SessionContext?
Ich Teste das ganze in einer Eclipse-IDE in der ein JBoos 4.2 Server gestartet ist.
Mein Client ist eine einfache Java-Klasse mit einer main-Methode.
Schöne Grüße,
Sebastian
ich würde gerne in einer Stateless-Session-Bean das Principal eines angemeldeten Benutzers auslesen.
Java:
@Resource
SessionContext sessionContext;
public void doSth() {
Principal p = sessionContext.getCallerPrincipal();
}
ich bekomme aber immer eine Exception sobald ich versuche das Principal aufzurufen:
Code:
java.lang.IllegalStateException: No valid security context for the caller identity
at org.jboss.ejb3.BaseSessionContext.getCallerPrincipal(BaseSessionContext.java:190)
Mein Client schaut so aus:
Ich hab mir mein eigenes JAAS-LoginModul gebastelt und da kann ich mir auch mein Subject holen (Hinweis: auf ein Passwort wird nicht geprüft, es wird nur der Benutzername im Principal abgelegt):
Java:
LoginContext lc = null;
Subject sb = null;
try {
lc = new LoginContext("MyAuth", new MyCallbackHandler("Sebastian"));
lc.login();
sb = lc.getSubject();
} catch (LoginException e) {
e.printStackTrace();
}
Nun will ich die Stateless-Session-Bean aufrufen. Dafür dachte ich, muss ich folgendes machen:
Java:
Subject.doAs(sb, new MyAction());
Java:
public class MyAction implements PrivilegedAction {
public Object run() {
IMyBean myBean;
try {
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "=org.jboss.naming:org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "localhost:1099");
InitialContext context = new InitialContext(properties);
myBean= (IMyBeanRemote) context .lookup("MyBean/remote");
myBean.doSth();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
bei doSth bzw. getCallerPrincipal wird aber dann immer die IlligalStateException geworfen.
Was mach ich da falsch?
Müsste ich das eher mit org.jBoss.security.jndi.LoginInitialContextFactory machen? Wie würde das funktionieren?
Eigentlich ist mein Ziel nur, in einer Stateless-Session-Bean herauszufinden, wie der Benutzer heißt, der sich angemeldet hat. Gibt es da vielleicht einen anderen/besseren Weg als über den SessionContext?
Ich Teste das ganze in einer Eclipse-IDE in der ein JBoos 4.2 Server gestartet ist.
Mein Client ist eine einfache Java-Klasse mit einer main-Methode.
Schöne Grüße,
Sebastian
Zuletzt bearbeitet: