Właśnie przeszedł przez to wszystko szuka prostego rozwiązania. Zacząłem najpierw przyglądać się temu z perspektywy kocurka.
Tomcat nie daje bezpośredniego dostępu do konfiguracji pliku cookie domeny dla sesji, a ja na pewno nie chciałem dostosowywać tomcat, aby rozwiązać ten problem, jak pokazano w innych postach.
Zawory w tomcat również wydają się być problemem z uwagi na ograniczenia dostępu do nagłówków. Pliki cookie są wbudowane w specyfikację serwletu. Zawodzą też całkowicie, jeśli odpowiedź HTTP zostanie zatwierdzona, zanim zostanie przekazana do twojego zaworu.
Odkąd wykonaliśmy nasze żądania za pośrednictwem Apache, przeszedłem do tego, jak użyć Apache, aby rozwiązać problem.
Najpierw wypróbowałem dyrektywę mod_proxy ProxyPassReverseCookieDomain, ale nie działa ona dla plików cookie JSESSIONID, ponieważ tomcat nie ustawia atrybutu domeny, a ProxyPassReakeCookieDomain nie może działać bez domeny, która jest częścią pliku cookie.
Natknąłem się również na hakowanie za pomocą ProxyPassReverseCookie Path, gdzie przepisywano ścieżkę, aby dodać atrybut domeny do pliku cookie, ale to było dość kłopotliwe dla strony produkcyjnej.
W końcu udało mi się to zrobić, przepisując nagłówki odpowiedzi za pomocą modułu mod_headers w apache, o czym wspomniał Dave powyżej.
I dodano następującą linię wewnątrz definicji wirtualnego hosta:
Header edit Set-Cookie "(JSESSIONID\s?=[^;,]+?)((?:;\s?(?:(?i)Comment|Max-Age|Path|Version|Secure)[^;,]*?)*)(;\s?(?:(?i)Domain\s?=)[^;,]+?)?((?:;\s?(?:(?i)Comment|Max-Age|Path|Version|Secure)[^;,]*?)*)(,|$)" "$1$2; Domain=.example.com$4$5"
Powyższy powinny być w jednej linii w konfiguracji. Zastąpi dowolny atrybut domeny cookie JSESSIONID nazwą ".example.com". Jeśli plik cookie JSESSIONID nie zawiera atrybutu domeny, wzorzec doda taki plik o wartości ".example.com". Jako bonus, rozwiązanie to nie cierpi z powodu problemu z podwójnymi plikami cookie JSESSION zaworów.
Wzór powinien działać z wieloma plikami cookie w nagłówku pliku cookie, nie wpływając na inne pliki cookie w nagłówku. Powinna również istnieć możliwość modyfikacji do pracy z innymi ciasteczkami poprzez zmianę JSESSIONID w pierwszej części wzorca na dowolną nazwę ciasteczka, której pragniesz.
Nie jestem użytkownikiem energii, więc jestem pewny, że istnieje kilka optymalizacji, które można wprowadzić do schematu, ale wydaje się, że działa on dla nas do tej pory.
Będę aktualizować ten post, jeśli znajdę jakieś błędy ze wzorem. Mam nadzieję, że to powstrzyma kilku z was, którzy musieli przejść przez kilka ostatnich dni frustracji, tak jak ja.
+1 Właśnie tego szukałem! W końcu dodali łatkę. – Kdeveloper