On 06/12/2009 21:51, itay sahar wrote:
Hi Andre,
please see below input and output of:
protected String encodeToken(String username, String value)
{
StringBuilder sb = new StringBuilder();
sb.append(username);
sb.append(":");
sb.append(value);
return Base64.encodeBytes(sb.toString().getBytes());
}
Input is:
username= itay.sa...@gmial.com
value= 6de5ca4f:1254c461110:-7feb:9135486247122677484
Output is (this is what actually addCookie get as parameter):
6de5ca4f:1254c461110:-7feb:9135486247122677484
Can you suggest solution ?
Yep.
You are claiming that you are supplying A & B to the encodeToken
function, but then you are using B as the cookie value.
Try using the value returned from the encodeToken function instead.
Hint, if it contains a ":" character, it's not Base64 encoded.
p
On Sun, Dec 6, 2009 at 11:28 PM, itay sahar<itay.sa...@gmail.com> wrote:
Hi Andre,
please see below input and output of:
protected String encodeToken(String username, String value)
{
StringBuilder sb = new StringBuilder();
sb.append(username);
sb.append(":");
sb.append(value);
return Base64.encodeBytes(sb.toString().getBytes());
}
Input is:
username= itay.sa...@gmial.com
value= 6de5ca4f:1254c461110:-7feb:9135486247122677484
Output is:
aXRheS5zYWhhckBnbWFpbC5jb206NmRlNWNhNGY6MTI1NGM0NjExMTA6LTdmZWI6OTEzNTQ4NjI0
Can you suggest solution ?
On Sat, Dec 5, 2009 at 6:20 PM, André Warnier<a...@ice-sa.com> wrote:
Mark Thomas wrote:
itay sahar wrote:
Caused by: java.lang.IllegalArgumentException: Control character in
cookie
value, consider BASE64 encoding your value
at
org.apache.tomcat.util.http.ServerCookie.maybeQuote2(ServerCookie.java:396)
To cause this, there must be a character in the value with an ASCII code
of less than 0x20 or greater or equal to 0x7f and is not 0x09.
You need to fix that first.
Then you'll need to worry about Base64 using '=' in cookie values. The
value needs to be quoted for this to work. Tomcat will do this
automatically if necessary.
Mark above is talking about the output value of the Base64 encoder which
you are using, and which you then feed to the response.addCookie(cookie)
method.
It is not clear (to me) where the used Base64.encodeBytes() method comes
from. But wherever it comes from, it should encode any input series of
bytes according to
http://tools.ietf.org/html/rfc3548#section-3
which cannot produce "control characters".
Except that some Base64 encoders, in some cases, will "wrap" the output
string at 76 bytes, by inserting a CR/LF pair, which are both "control
characters". (Note that the output string of Base64 is longer than the
input string, since it encodes 3 consecutive input bytes into 4 output
bytes.)
My guess is that this is what happens here, and that could trigger the
exception above.
Maybe this Base64.encodeBytes() method has an optional argument which
would tell it to not wrap the output value ?
Note also that with the code you were showing, the control character(s)
could presumably be also in "cookiePath".
Why do you not log the cookie value, just before you call
setCookieValueIfEnabled(String value) ?
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org