Bonjour à tous,

Je viens ici car je n'arrive pas à faire la configuration suivante.

J'ai un serveur tomcat qui fait tourner 2 applications web mettons l'application secretApp et publicApp.
Je souhaite protéger l'accès unniquement de sercretApp avec le realm et pas la publicApp.

Pour le moment, je fais très simple avec une base en mémoire venant de tomcat-users.xml. Je déporterais cela dans une vraie BD après.

J'ai donc la config suivante :

ds web.xm

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
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secret Application</web-resource-name>
        <url-pattern>/secretApp/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>
<security-role>
  <role-name>admin</role-name>
</security-role>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Secret Application</realm-name>
</login-config>
`ds tomcat-user.xml =

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<role rolename="admin"/>
<user username="admin" password="pass" roles="admin"/>
Dans serveur.xml j'ai laissé la config par défaut :

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
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
 
.....
 
      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
Voilà donc on est sur du super basique.
Tout est dans le titre, l'url-pattern ne semble pas fonctionner normalement.

En effet, si je souhaite tout protéger et que je met /* dedans, nickel ça marche tomcat me demande de m'authentifier partout.

Mais dès que je met autre chose, ça ne marche plus même si je n'ai aucune erreur dans les logs, tomcat ignore purement la configuration et ne demande d'authentification nul part.
J'ai cherché sur le net et ici mais je n'ai rien trouvé. J'ai testé sur windows et sur un serveur CentOS, j'ai le même pb.
J'ai également testé la méthode avec une security-constraint générale qui demande l'authent et une spécifique pour ma publicApp qui ne demande aucun role, ça ne marche pas non plus, tomcat
demande alors l'authent partout.

En fait tout se passe comme si la seule url-pattern que tomcat reconnaît est /*

Alors soit tomcat8 est incapable de protéger spécifiquement que certaines urls et ne fait que de la protection globale soit j'ai raté un truc dans les configurations.