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; } }Sortie:
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; } }
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) ...
Partager