【问题标题】:Modify header cookies for static assets on tomcat and proxied with apache httpd修改 Tomcat 上静态资产的标头 cookie 并使用 apache httpd 代理
【发布时间】:2021-02-05 14:35:51
【问题描述】:

我们有一个基于 java servlet 的应用程序(非常旧的代码库),它由带有 Apache httpd 2.4.43 和 mod_proxy 的 tomcat 8 提供服务。应用程序有一些与 java web 应用程序捆绑在一起的静态资产(CSS、CS、IMAGES)。

我正在尝试通过添加 apache 规则来修改这些资产的 Header cookie,但似乎这可能不起作用,因为文件不在 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>

【问题讨论】:

    标签: java apache header tomcat8 httpd.conf


    【解决方案1】:

    来自mod_header的apache文档:

    当且仅当 header 有条件地在响应中发送 MyHeader MyRequestHeader 出现在请求中。这对 响应某些客户刺激而构建标头。注意 这个例子需要 mod_setenvif 模块的服务。

    SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
    Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
    

    来自rewrite flags的文档

    使用 [E] 或 [env] 标志,您可以设置环境的值 多变的。请注意,某些环境变量可能会在 规则运行,从而取消您设置的内容。查看环境 变量文档,了解有关环境变量如何工作的更多详细信息。

    结合两者,当路径匹配 js 或 css 文件时,您可以有条件地修改 header :

    RewriteRule ^.*\.(js|css)$ - [E=SET_COOKIE:true]
    Header edit Set-Cookie (.*) "$1;HttpOnly;Secure;SameSite=Strict" env=SET_COOKIE
    

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2015-07-29
      • 2015-07-06
      • 2012-04-08
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多