Я перемещаю webapp с платформы.NET на Java, и мне приходится иметь дело с устаревшим malformed cookie. Мне нужно прочитать куки файл с разделенным запятой значением, и, как объяснено в этом другом вопросе, оно недействительно. Когда я пытаюсь читать из HttpServletRequest, он дает мне только первое значение из списка, разделенного запятыми.
Мой последний подход к решению этой проблемы - изменить значение cookie с сервера apache с помощью mod_rewrite.
Поскольку я новичок с конфигурацией apache, я не получил правильного способа заменить все запятые другим символом.
Мой лучший подход заключается в замене 9 запятых или 8 запятых... или 1 запятой следующим образом:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9|%10:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8|%9:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7|%8:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6|%7:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5|%6:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4|%5:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3|%4:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2|%3:dev.server.intranet:43200]
RewriteCond %{HTTP_COOKIE} COOKIE_NAME=(.*),(.*)
RewriteRule ^(.*)$ - [CO=COOKIE_NAME:%1|%2:dev.server.intranet:43200]
Я считаю это уродливым и неполным, потому что если список с разделителями-запятыми длиннее 10 значений, для полного исправления потребуется дополнительный вызов.
Я пробовал флаг Next [N] для повторения, пока никаких запятых не осталось, но это не сработало.
Я искал mod_headers, но я думаю, что у меня одна и та же проблема.
Наконец, я нашел решение:
RequestHeader edit* Cookie "(,)" "|"
При этом все запятые во всех файлах cookie будут заменены на '|' персонаж.