普通にやる場合は、HttpServletResponse+addCookieで新しいクッキーを登録してあげればうまく動作するはずなんだけど、何度やってもクッキーが保存されない!。OAuth認証できないじゃん。イライラ。
頭にきたので自分でHttpServletResponse+setHeader直叩き。すると普通に動いた。イライラ。GMT形式のタイムスタンプを使わないとExpiresが設定できないので適当にSimpleCookieクラスを作った。時間の無駄。イライラ。以下ソースコード。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class SimpleCookie
{
private String name;
private String value;
private int expires = -1;
private String domain = null;
private String path = null;
private boolean secure = false;
private final ThreadLocal<DateFormat> localDateFormat = new ThreadLocal<DateFormat>()
{
@Override protected DateFormat initialValue()
{
DateFormat formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss zzz", Locale.US);
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
return formatter;
}
};
public SimpleCookie(String name, String value)
{
this.name = name;
this.value = value;
}
@Override public String toString()
{
StringBuilder builder = new StringBuilder();
// key value
builder.append(this.name).append("=").append(this.value).append(";");
if(this.expires != -1)
{
DateFormat format = this.localDateFormat.get();
Date exp = new Date(System.currentTimeMillis() + this.expires * 1000);
builder.append(" expires=").append(format.format(exp)).append(";");
}
if(this.domain != null)
{
builder.append(" domain=").append(this.domain).append(";");
}
if(this.path != null)
{
builder.append(" path=").append(this.path).append(";");
}
if(this.secure)
{
builder.append(" secure");
}
return builder.toString();
}
public int getExpires()
{
return expires;
}
public void setExpires(int expires)
{
this.expires = expires;
}
public String getDomain()
{
return domain;
}
public void setDomain(String domain)
{
this.domain = domain;
}
public String getPath()
{
return path;
}
public void setPath(String path)
{
this.path = path;
}
public boolean getSecure()
{
return secure;
}
public void setSecure(boolean secure)
{
this.secure = secure;
}
public String getName()
{
return name;
}
public String getValue()
{
return value;
}
}
ツッコミ募集中ー。