Avatar billede jogii Nybegynder
30. juni 2011 - 21:44 Der er 20 kommentarer og
1 løsning

Kan der være fejl i HttpServletRequest.getCookies( ) ?

Jeg får tildelt en cookie fra et system, som ser sådan her ud.

Token=AAECAzRFMEM4MDk2NEUwQzg3OUVDTj1KZW5zIEJydW50dC9PPUNvbnZlcmdlbnOx8BfDWRTH27uCWAa3CK3S0d2jAw==

(jeg er ikke sikker på den hele cookie kan vises, så jeg bryder den lige op i stumper
Token=
AAECAzRFMEM4MDk2NEUw
Qzg3OUVDTj1KZW5zIEJy
dW50dC9PPUNvbnZlcmdl
bnOx8BfDWRTH27uCWAa3
CK3S0d2jAw==
)



Men når jeg trækker cookien ud via
Cookie[] cookies = req.getCookies();
og derefter arbejder videre med

for (int i = 0; i < kager.length; i++) {
  Cookie cookie = kager[i];
  out.println("<br>" + cookie.getName() + ":" + cookie.getValue());
            }
så kommer der til at stå
Token=
AAECAzRFMEM4MDk2NEUw
Qzg3OUVDTj1KZW5zIEJy
dW50dC9PPUNvbnZlcmdl
bnOx8BfDWRTH27uCWAa3
CK3S0d2jAw

altså uden de 2 sidste ==

Jeg kan også godt forstå man evt. kommer til at parse forkert, når nu = bruges som Name/Value seperator, men det er jo forkert.

Jeg har en formodning om at fejlen ligger i core delen af req.getCookies();

Er der nogen der ved om man kan se i kildekoden til .getCookies( )?

Det nærmeste jeg fandt er
http://www.docjar.com/html/api/javax/servlet/http/HttpServletRequest.java.html
Avatar billede arne_v Ekspert
30. juni 2011 - 21:59 #1
Hvis du bruger Tomcat saa kan du jo downloade kildekoden til Tomcat's implementation af dette interface.
Avatar billede jogii Nybegynder
30. juni 2011 - 22:19 #2
Davs Arne, jo det er faktisk Tomcat. Kan du evt. hjælpe med et link ? Jeg tror nu ikke jeg lyster af downloade hele Tomcat'en.

På det link jeg postede foroven, ser det ud til at det er nogle "forward" klasser (eller Interfaces hedder det vist)  til noget bagvedliggende, er det rigtigt forstået ?

Så ved at downloade selv Tomcat kildekoden , vil jeg kunne se selve implementeringen ?
Avatar billede jogii Nybegynder
30. juni 2011 - 22:35 #3
Nu fandt jeg kildekoden :P 4,2 MB zippet java-kode, nuvel, det er bare at tygge sig igennem : )
Tak, smid et svar !
Avatar billede jogii Nybegynder
30. juni 2011 - 22:50 #4
Stadig mystisk.
Jeg fandt ca. 15 MB kode her  http://mirrors.dotsrc.org/apache//tomcat/tomcat-6/v6.0.32/

men det meste er stadig bare javadoc og interfaces. Er selve implementeringen af koden et andet sted ?
Avatar billede erikjacobsen Ekspert
30. juni 2011 - 23:37 #5
Uden at jeg ved så meget om det, så er der noget med at = kan opfattes som en separator, (som i a=7). Der står jo også "Token=..."

Det er enten en fejl i implementeringen, eller også er det de andre, der gør det forkert. Men Q&D: Kan du få den til ikke at sende =-ere ud?
Avatar billede erikjacobsen Ekspert
30. juni 2011 - 23:38 #6
Tænk på det som at de laver en split på "=" også tager nummer 0 som variabelnavn, og nummer 1 som værdi. Jeg ved ikke hvad standarden tilsiger.
Avatar billede erikjacobsen Ekspert
30. juni 2011 - 23:40 #7
Yes: http://cephas.net/blog/2005/04/01/asp-java-cookies-and-urlencode/

= skal selvfølgelig urlencodes så det sendes som %3D
Avatar billede arne_v Ekspert
30. juni 2011 - 23:56 #8
Det er den rigtige kode.

Sporene foerer til:

java\org\apache\catalina\connector\Request.java

som foerer til:

java\org\apache\coyote\Request.java

som foerer til:

java\org\apache\tomcat\util\http\Cookies.java

som laver parsningen,
Avatar billede arne_v Ekspert
30. juni 2011 - 23:57 #9
Naa nu har Erik saa analyseret input lidt.
Avatar billede arne_v Ekspert
30. juni 2011 - 23:58 #10
Koden indeholder foelgende kode:

        ALLOW_EQUALS_IN_VALUE = Boolean.valueOf(System.getProperty(
                "org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE",
                "false")).booleanValue();


og kombineret med Erik's analyse, saa kunne det vaere sjov at starte Tomcat med:

-Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true
Avatar billede jogii Nybegynder
01. juli 2011 - 00:30 #11
Ja det er lige det jeg skrev at jeg ville lede efter i kildekoden.
Men nu er det jo heller ikke fint af udstederen at inkludere = i selve værdien.

Jeg skal arbejde videre med den Token, da den giver sikkerhed i andre systemer. Jeg kan dog kopiere alle cookies ud via headeren, og evt .selv separere værdierne derfra. Men det er bare ærgerligt at den fejler.

Nu er jeg ved at hente selve Tomcat ned via SVN og Eclipse, så jeg skal nok finde den lille satans kode ; )
Avatar billede jogii Nybegynder
01. juli 2011 - 00:45 #12
Arne, hvordan ser/følger du de spor ?
Erik, skal cookie værdier være encoded ? Jeg så der galt RFC-regler for cookiens navn, mens der for værdierne stod, at de kunne være "hvad som helst". Hmm, tydeligvis ikke.
Avatar billede arne_v Ekspert
01. juli 2011 - 01:31 #13
Jeg har givet dig filnavnene.
Avatar billede arne_v Ekspert
01. juli 2011 - 01:32 #14
Men jeg tropr som sagt slet ikke at du behoever at rette i kode.

Bare start Tomcat med den option jeg angav.
Avatar billede arne_v Ekspert
01. juli 2011 - 03:25 #15
Som kuriosum kan det naevnes at flere af de filer har Craig McClanahan himself som author.
Avatar billede jogii Nybegynder
01. juli 2011 - 08:26 #16
Jo tak Arne, jeg har kigget koden igennem og set hvordan det flag har indflydelse på afgrænsningen af strengen, og at de faktisk skriver at de måske ikke overholder RFC'en, men jeg var interesseret i at høre, hvordan du fra den første interface fil fandt frem til de bagvedliggende filer. Er der en reference til dem i interfacet, som jeg ikke ser?
Avatar billede arne_v Ekspert
01. juli 2011 - 13:54 #17
Jeg er en doven hund saa jeg soegte bare efter filer som indeholdt "getCookies".
Avatar billede arne_v Ekspert
01. juli 2011 - 13:54 #18
Interfaces har ikke referencer til de implementerende klasser.
Avatar billede jogii Nybegynder
01. juli 2011 - 14:42 #19
Godt så, super svar : ) Det er faktisk point værd i sig selv : )
Kom så med et "svar" så jeg kan komme af med mine point : )

Det virkede forøvrigt perfekt! Eneste anke foreløbig er, at jeg skal tilføje variablen til etc/init.d/tomcatd , og at den fil risikerer at blive overskrevet ved opgraderinger.

Det er forøvrigt IBM's LtpaTokens, jeg arbejder med.
Avatar billede jogii Nybegynder
01. juli 2011 - 14:43 #20
Og tak tik Erik for din reference til en anden vinkel på problemstillingen : )
Avatar billede arne_v Ekspert
01. juli 2011 - 15:17 #21
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester