#java #apache #header #tomcat8 #httpd.conf
#java #apache #заголовок #tomcat8 #httpd.conf
Вопрос:
У нас есть приложение на основе Java-сервлетов (очень старая кодовая база), которое обслуживается с tomcat 8 с Apache httpd 2.4.43 и mod_proxy. Приложение имеет некоторые статические ресурсы (CSS, CS, ИЗОБРАЖЕНИЯ) в комплекте с веб-приложением Java.
Я пытаюсь изменить файл cookie заголовка для этих ресурсов, добавив правило apache, но, похоже, может быть, это не работает, поскольку файлы не находятся на уровне apache?
<FilesMatch ".(js|css)$">
Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict"
</FilesMatch>
Я попытался добавить правило без FilesMatch
условий, и оно сработало, но это не то, что мне нужно.
Любые мысли о том, как это сделать на уровне Apache. Вот выдержка из httpd conf
<VirtualHost *:443>
DocumentRoot "/apps/httpd/htdocs1"
ServerName www.mydomain.com
ServerAlias mydomain.com
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/version$
RewriteRule ^/.*$ /version.html [R=301,L]
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
<Proxy balancer://${HOSTNAME}-http-cluster>
Header add Set-Cookie "MYAPP_SESSION=jacplus.%{BALANCER_WORKER_ROUTE}e;path=/;"
BalancerMember http://myhost-002:31080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=myhost-002
BalancerMember http://myhost-003:31080 min=1 max=1000 loadfactor=1 retry=1 timeout=240 route=myhost-003
</Proxy>
ProxyPass / balancer://${HOSTNAME}-http-cluster/ stickysession=MYAPP_SESSION lbmethod=byrequests
ProxyPassReverse / balancer://${HOSTNAME}-http-cluster/ stickysession=MYAPP_SESSION
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Deny from all
Allow from 10.25.0.0/16
</Location>
...
</VirtualHost>
Ответ №1:
Из документации apache mod_header :
Условно отправляйте MyHeader в ответ тогда и только тогда, когда заголовок MyRequestHeader присутствует в запросе. Это полезно для создания заголовков в ответ на некоторые стимулы клиента. Обратите внимание, что для этого примера требуются услуги модуля mod_setenvif.
SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
Из документации по флагам перезаписи
С помощью флага [E] или [env] вы можете установить значение переменной среды. Обратите внимание, что некоторые переменные среды могут быть установлены после запуска правила, что приведет к отмене установленных вами настроек. Смотрите Документ Переменные среды для получения более подробной информации о том, как работают переменные среды.
Комбинируя оба, вы можете изменять заголовок условно, когда путь соответствует файлу js или css :
RewriteRule ^.*.(js|css)$ - [E=SET_COOKIE:true]
Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict" env=SET_COOKIE