Gestion des rôles JEE.

L'application propose quelques outils d'aide. Ceux ci sont accessibles sous http://host[:port]/mywebapp/console

la ressource /console est protégée par un rôle JEE.

 

Ajout du rôle dans tomcat-user.xml

<?xml version="1.0" encoding="UTF-8"?>
 ...
<role rolename="wagon-administrator"/>
  ...
<user username="admin" password="secret" roles="wagon-administrator"/>
</tomcat-users>

 

Sécurisation des mots de passe dans tomcat : modifier Realm dans server.xml

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" digest="sha-512" />

Ensuite il faut générer le mot de passe depuis TOMCAT_HOME\bin\digest.bat (ou .sh)
digest.bat -a sha-512 myverysecretpassword
myverysecretpassword:b607e0c2a25e30495304307e058924512bf13705d56e18e568ba5297543d9b30$1$a679223cb
et il faut copier le mot de passe encodé après le : dans la valeur password du tomcat-users.xml

 

Configuration du connector dans server.xml

 <Connector compressableMimeType="text/html,text/xml,text/css,text/plain,application/json,application/javascript" compression="force" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="4194304" URIEncoding="UTF-8"/>
  • remarque : les directives compressableMimeType et compression ne sont nécessaire qu'en l'absence d'un frontal web, généralement en charge de la compression de flux

 

Configuration du connector derrière un reverse proxy. Cette configuration n'est possible que si votre reverse proxy supporte les websockets

<!-- Connecteur en reverse-proxy pour une connection http -->
 <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="81" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" scheme="http" proxyName="www.domain.com" proxyPort="80"/> 
 
<!-- Connecteur en reverse-proxy pour une connection https -->
  <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="82" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" scheme="https" proxyName="www.domain.com" proxyPort="443"/> 

 

Augmentation de la taille du buffer texte des websockets. modification du fichier $TOMCAT_HOME/conf/web.xml, ajout de

    <context-param>
         <param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
         <param-value>65536</param-value>
    </context-param>

Définition des expirations de ressource en cas d'absence d'un frontal web en charge de cette opération modification du fichier $TOMCAT_HOME/conf/web.xml, ajout de

 <filter> 
 <filter-name>ExpiresFilter</filter-name> 
 <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class> 
 <init-param> 
    <param-name>ExpiresByType image</param-name> 
    <param-value>access plus 10 days</param-value> 
 </init-param> 
 <init-param> 
    <param-name>ExpiresByType text/css</param-name> 
    <param-value>access plus 10 days</param-value> 
 </init-param> 
 <init-param> 
    <param-name>ExpiresByType application/javascript</param-name> 
    <param-value>access plus 10 days</param-value> 
 </init-param> 
</filter> 
<filter-mapping> 
 <filter-name>ExpiresFilter</filter-name> 
 <url-pattern>/*</url-pattern> 
 <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

L'ensemble des données sont fournies à titre d'exemple, il convient bien évidemment de les adapter à votre contexte.

 

Configuration d'une extension JMX 

Configuration d'une extension JMX non sécurisée dans Tomcat.

Modification du ficher catalina.sh ou catalina.bat

Linux :

# for JMX monitoring
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=1111"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"

Microsoft Windows :

rem for JMX monitoring
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote=true
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=1111
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false

Configuration de JMX avec l'authentification de client sans SSL.

Création dans le répertoire conf du fichier jmxremote.access. exemple

monitorRoleUser   readonly
controlRoleUser   readwrite


Création dans le répertoire conf du fichier jmxremote.password. exemple

monitorRoleUser   password1
controlRoleUser   password2

Important : Etant donné que des mots de passe en texte en clair sont stockés dans le fichier jmxremote.password, ce fichier doit être lisible par le propriétaire uniquement. Sinon, le programme se ferme avec une erreur.

Linux :
 
chmod 600 jmxremote.password
 
Windows in administrator mode :
icacls jmxremote.password /setowner myuser
icacls jmxremote.password /inheritance:r
icacls jmxremote.password  /grant:r myuser:(r,w)

 

Modification du ficher catalina.sh ou catalina.bat

Linux :

# for JMX monitoring
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=1111"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password"

Microsoft Windows :

rem for JMX monitoring
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote=true
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=1111
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.access.file=..\conf\jmxremote.access
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.password.file=..\conf\jmxremote.password