Bonjour à tous.

Après plusieurs jours de recherche, de tests, je me résigne à poster mon problème pour trouver une lumière.

Comme l'indique le titre, j'ai un problème avec la configuration de JDBC realm. Mon exemple est basique mais ne fonctionne pas. Lors de l'authentification à une page sur laquelle certains rôles sont autorisés, le mot de passe et le nom d'utilisateur sont bien trouvés dans la base de données (sinon, glassfish me renvoie un loginException). Après que l'authentification ai réussie, la page reste inaccessible me disant que l'utilisateur ne peut pas y avoir accès. La problème vient donc de l'autorisation et non de l'authentification. Je pense que cela doit venir du "role-mapping". Mais comme je n'en suis pas sûr je vais vous détailler le tout.

Contexte: Java EE7, Glassfish 4.1.

Base de données:
- table "groupu" représentant les groupes (colonne "name", primary key)
- table "user_web" qui sont les utilisateurs (colonne "mail", unique)
- table "group_user" (colonnes "mail" et "groupu". Primary key: "groupu" + "mail". Foreign key: "groupu" référence "name" dans "groupu". "mail" référence "mail" dans "user_web").

Configuration du realm dans Glassfish:

Nom : glassfish config.PNG
Affichages : 126
Taille : 48,9 Ko



Le fichier glassfish-web.xml

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
18
19
20
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app> 
      <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
 
    <security-role-mapping>
        <role-name>CUSTOMER</role-name>
        <group-name>CUSTOMER</group-name>             
    </security-role-mapping>
    <security-role-mapping>
        <role-name>EMPLOYEE</role-name>   
        <group-name>EMPLOYEE</group-name>                 
    </security-role-mapping>   
</glassfish-web-app>


Le ficher web.xml

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
 
    </context-param>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
 
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/public/account_activation.xhtml</welcome-file>
    </welcome-file-list>
    
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>dili_realm</realm-name>       
    </login-config>
    
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secure Pages</web-resource-name>
            <url-pattern>/faces/employee/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>CUSTOMER</role-name>
            <role-name>EMPLOYEE</role-name>               
        </auth-constraint>        
    </security-constraint> 
    
    <security-role>
        <description>Customer</description>
        <role-name>CUSTOMER</role-name>
    </security-role>
    <security-role>
        <description>Employee</description>
        <role-name>EMPLOYEE</role-name>
    </security-role>
    
</web-app>
Et donc quand j'essaie d'accéder à une page situé dans le dossier "employee", la resource est "forbidden". Voilà, si quelqu'un a une idée. Car je ne sais plus où chercher.

Merci.