Измените файлы cookie заголовков для статических ресурсов в tomcat и прокси с помощью apache httpd

#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