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"/> |
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.
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 |
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 |