¿Cómo autentico una aplicación cliente a servidor EJB 3.0
Pregunta
Soy muy nuevo a toda la arquitectura J2EE. Podría alguien ayudarme?
Tengo un cliente oscilación con el inicio de sesión, contraseña campos en la máquina 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");
Tengo un EJB 3.0 en JBoss5 en la máquina 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;
}
}
Tengo una base de datos con los usuarios y roles en el servidor (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>
A mi entender, no debería tener referencia EJB hasta que el cliente se autentica correctamente. ¿Cómo uso LoginContext, y lo uso en absoluto? Puedo / debo usar @EJB private MyBeanRemote ejb
? ¿Y cómo hago para que el conjunto funcione?
Estoy tratando de construir una cosa aparentemente trivial: la autorización del cliente de la aplicación. Me siento estúpido.
Muchas gracias.
Solución
hice un trabajo con JAAS recentely y encontré que puede ser bastante complicado. Echa un vistazo a estos dos recursos que nos parecieron muy útil http://www.jaasbook.com/ y http://docs.jboss.org/jbossas/admindevel326/html/ch8. chapter.html
También tengo una carga de otro libro recursos JAAS marcada en http://delicious.com/chronosMark / JAAS con suerte uno de ellos le ayudará a determinar si los otros dos no lo hacen.
Otros consejos
Hay un tutorial aquí