Nebylo by lepsi v tom stateless beanu mit jen jednu metodu ktera jako
parametr obdrzi
nazev role a v sobe zavola metodu ctx.isCallerInRole(role) a vrati vysledek?
Vl.
Martin Bednář napsal(a):
Chtel bych se zeptat, jak idealne resit nasledujici situaci.
Mam aplikaci EJB3 (Jboss 4.0.x) ktera vyuziva klienta napsaneho jako
Eclipse RCP.
Uzivatele a role jsou ted definovane v DB, v budoucnu v LDAP - to kde
je to nadefinovane je zalezitost JBosse a pro klienta je
transparentni, nepletu li se.
No a jde mi o to jak resit situaci:
Uzivatel se prihlasi. Na zaklade roli, ktere dany uzivatel ma
povolim/nepovolim prislusne polozky v menu, toolbaru, atd.
V security contextu jsem nenasel nic co by mi umoznovalo zjistit
jestli uzivatel ma nebo nema prislusnou roli. Takze to zatim delam tak
ze mam stateless beanu s metodami kde kazda metoda je povolena pro
jinou roli a volanim techto metod a chytanim SecurityException
zjistuju jak na tom uzivatel s pravy je, toto mi ale prijde naprosto
silene, a tusim ze delam neco blbe. Jen nevim jak na to.
Ted to delam nejak takhle:
try{
LoginContext lc = new LoginContext("other", handler);
lc.login();
InitialContext ctx = new InitialContext();
IEclipsePreferences preferences = new
ConfigurationScope().getNode(Application.PLUGIN_ID);
String serverAddress =
preferences.get(ServerPreferencePage.SERVER_ADDRESS, "localhost");
ctx.addToEnvironment("java.naming.provider.url",serverAddress);
ClientLogin clientLogin = ((ClientLogin)
ctx.lookup(ClientLogin.class.getName()));
clientLogin.isAdminRole();
} catch (LoginException e) {
....
Log.logError("Authentication failed", e);
} catch (SecurityException e) {
....
}
class MyHandler implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
NameCallback nc = (NameCallback) callbacks[i];
nc.setName(loginComponent.getUsername());
} else if (callbacks[i] instanceof PasswordCallback) {
PasswordCallback pc = (PasswordCallback) callbacks[i];
pc.setPassword(loginComponent.getPassword().toCharArray());
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");
}
}
}
};
Diky za radu
Bedy
--
Ing. Vlastimil Elias Qbizm technologies, a.s.
vedouci analytik ... the art of software.
____________________________________________________________________
www.qbizm-technologies.cz www.qbizm.cz www.qbizm-services.cz