Bonjour à tous,
je suis en train de tester la sécurité pour les EJB, et j'ai un problème: l'annotation @DenyAll (même problème avec @RolesAllowed + un rôle inexistant) ne fonctionne pas: l'appel à la méthode business est effectué. En revanche, si j'utilise la méthode isCallerInRole, ça fonctionne.
J'utilise JBoss 5.1.0.GA

J'authentifie le client par une simple JSP. Depuis une Servlet j'appelle l'EJB.

Les EJB:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
@SecurityDomain("mySecurityDomain")
@DeclareRoles({"guest", "user"})
@Stateless
public class TestSecurityAnnotationsBean implements ITestSecurityRemote {
 
  @DenyAll
  public String sayMeHello(String name) {
    System.out.println("TestSecurityAnnotationsBean OK");
    return "Hello " + name;
  }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
@SecurityDomain("mySecurityDomain")
@DeclareRoles({"guest", "user"})
@Stateless
public class TestSecurityIsCallerInRoleBean implements ITestSecurityRemote {
 
  @Resource
  private EJBContext context;
 
  public String sayMeHello(String name) {
    if (!context.isCallerInRole("user")) {
      throw new SecurityException();
    }
    System.out.println("TestSecurityIsCallerInRoleBean OK");
    return "Hello " + name;
  }
}
Sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
15:11:10,452 INFO  [STDOUT] TestSecurityAnnotationsBean OK
15:11:10,515 ERROR [[Hello]] Servlet.service() for servlet Hello threw exception
javax.ejb.EJBException: java.lang.SecurityException
	at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)
  ...
Caused by: java.lang.SecurityException
	at com.test.TestSecurityIsCallerInRoleBean.sayMeHello(TestSecurityIsCallerInRoleBean.java:22)
  ...