Olá pessoal, eu estou seguindo o material da CAELUM do curso de EJB que fiz, porém fazendo uso do JBoss 5.1. Uso o Derby para testes e criei as seguintes tabelas e registros:
[code]create table users
(username varchar(15) not null PRIMARY KEY,
password varchar(50) not null
);
create table roles
(username varchar(15) not null,
role varchar(15) not null
);
Alter table roles add primary key(username, role);
Insert into users values(?joao?, ?pass?);
Insert into roles values(?joao?, ?administrador?);
Insert into users values(?maria?, ?pass?);
Insert into roles values(?maria?, ?cliente?);
commit;[/code]
Criei no login-config dentro de default/conf o seguinte código:
<application-policy name="livraria">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag="required">
<module-option name="dsJndiName">java:/DerbyDS</module-option>
<module-option name="principalsQuery">
select password as Password from users where user like ?
</module-option>
<module-option name="principalsQuery">
select role, 'Roles' from roles where user like ?
</module-option>
</login-module>
</authentication>
</application-policy>
Meu EJB está anotado com @org.jboss.security.annotation.SecurityDomain;(“livraria”) e meu método com @javax.annotation.security.RolesAllowed(“administrador”). Meu cliente é o que segue abaixo:
[code] public static void main(String[] args) throws NamingException {
Properties env = new Properties();
env.setProperty(Context.SECURITY_PRINCIPAL, “maria”);
env.setProperty(Context.SECURITY_CREDENTIALS, “pass”);
env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
“org.jboss.security.jndi.JndiLoginInitialContextFactory”);
InitialContext ctx = new InitialContext(env);
IGerenciadorLoja gerenciador =
(IGerenciadorLoja) ctx.lookup(“LivrariaII/GerenciadorLojaBean/remote”);
System.out.println(gerenciador.listaLivros());
}[/code]
maria é cliente e não administrador, porém acessa o método normalmente. Alguém pode me auxiliar nisso?
Grato
Everton