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