Как мне аутентифицировать клиентское приложение на сервере EJB 3.0

StackOverflow https://stackoverflow.com/questions/700529

Вопрос

Я очень новичок во всей архитектуре J2EE.Не мог бы кто-нибудь мне помочь?

У меня есть Swing-клиент с полями логина и пароля на компьютере A.

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://localhost:1099/");

InitialContext ctx = new InitialContext(p);
ejb = (MyBeanRemote) ctx.lookup("DemoServer/MyBean/remote");

У меня есть EJB 3.0 на JBoss5 на машине B:

@Stateful
@DeclareRoles({"editor", "viewer"})
public class MyBean implements MyBeanRemote, Serializable  {

    @RolesAllowed({"editor"})
    public boolean modify() throws Exception {
            if(!ctx.isCallerInRole("editor")) throw new SecurityException("Can't modify");
            return true;
    }

    @RolesAllowed({"viewer","editor"})
    public boolean view() throws Exception {
            if(!ctx.isCallerInRole("viewer")) throw new SecurityException("Can't view");
            return true;
    }
}

У меня есть база данных с пользователями и ролями на сервере (conf/login-conf.xml):

<application-policy name="jboss-secure">
  <authentication>
    <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
        <module-option name="unauthenticatedIdentity">guest</module-option>
        <module-option name="dsJndiName">java:/MyDerby</module-option>
        <module-option name="principalsQuery">SELECT Password FROM Users WHERE Username=?</module-option>
        <module-option name="rolesQuery">SELECT Role, 'Roles' FROM Users WHERE Username=?</module-option>
    </login-module>
  </authentication>
</application-policy>

META-INF/jboss.xml:

<jboss>
    <security-domain>java:/jaas/jboss-secure</security-domain>
</jboss>

Насколько я понимаю, я не должен получать ссылку на ejb до тех пор, пока клиент не пройдет надлежащую аутентификацию.Как мне использовать LoginContext и использую ли я его вообще?Могу / должен ли я использовать @EJB private MyBeanRemote ejb?И как мне заставить все это работать?

Я просто пытаюсь создать, казалось бы, тривиальную вещь:авторизация клиента приложения.Я чувствую себя глупо.

Большое вам спасибо.

Это было полезно?

Решение

Недавно я проделал некоторую работу с JAAS и обнаружил, что это может быть довольно сложно.Ознакомьтесь с этими двумя ресурсами, я нашел их очень полезными http://www.jaasbook.com/ и http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html

У меня также есть куча других ресурсов JAAS book, отмеченных по адресу http://delicious.com/chronosMark/JAAS надеюсь, один из них поможет вам, если два других этого не сделают.

Другие советы

Есть учебное пособие здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top