如何向EJB 3.0服务器验证应用程序客户端

时间:2009-03-31 08:17:25

标签: java security java-ee ejb-3.0 jaas

我对整个J2EE架构都很陌生。有人可以帮帮我吗?

我在机器A上有一个带有登录,密码字段的Swing客户端。

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");

我在机器B上的JBoss5上有一个EJB 3.0:

@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吗?我怎样才能使整个过程发挥作用?

我只是想构建一个看似微不足道的东西:应用程序客户端的授权。我觉得很蠢。

非常感谢。

2 个答案:

答案 0 :(得分:2)

我做了一些与JAAS的合作,发现它可能非常棘手。看看我发现这两个资源非常有用的http://www.jaasbook.com/http://docs.jboss.org/jbossas/admindevel326/html/ch8.chapter.html

我还有一大堆其他JAAS资源书标记在http://delicious.com/chronosMark/JAAS,希望其中一个能帮助你,如果其他两个没有。

答案 1 :(得分:1)

有一个教程here