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

Odpovedet emailem