普通にやる場合は、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;
	}
}

ツッコミ募集中ー。

関連性がある記事

Disqusでコメント