忍者ブログ

HTTP通信でのセッションIDのCookieにSecure属性を付ける

2017年01月17日 22時23分17秒
WildFly + Spring な環境のWebアプリケーションにおいて、
セッションIDのCookieにSecure属性を付けるのにハマったのでメモ。

まず、WildFlyの設定で行えると思い調査。
まさしくこちらと同じ環境でやりたいことも一緒。
http://qiita.com/tsubu-mustard/items/651320e83497371947fc
こちらで紹介されている通り、standalone.xmlを修正してみるも改善されない。

WildFlyで調査を進めていると、web.xmlでも出来ることが判明。
http://stackoverflow.com/questions/31163475/how-to-activate-secure-cookies-in-wildfly
が、web.xmlを修正しても改善されない。
当然、standalone.xmlとweb.xmlを一緒に直しても改善されない。

で、もしかしてSpringで設定できるのか?と思い調べてみると正解。

今回のWebアプリではSpringセッションを利用している。
そのせいなのか、それともSpringを使っている時点でそうなのかは分かりませんが、
SpringがセッションIDをセットしてくれているようです。
http://docs.spring.io/spring-session/docs/current/reference/html5/guides/custom-cookie.html

一般的には、セッションIDといえばJSESSIONIDの名前で登録されているのが普通と思っていましたが、なぜかSESSIONで登録されているのを見て見ぬふりしていましたが、SpringがデフォルトではSESSIONという名前でCookieに登録されているようなので納得。

で、本題のSecure属性を付ける方法ですが、
上記サイトにはHTTPS接続であれば自動的にsecure属性を付けると書いているだけです。
今回はHTTP接続でもsecure属性を付けたいので、DefaultCookieSerializerを調べてみたところありました。

今回追加修正したメソッドは下記の通り。

        @Bean
        public CookieSerializer cookieSerializer() {
                DefaultCookieSerializer serializer = new DefaultCookieSerializer();
                serializer.setCookieName("SESSIONID");
                serializer.setUseHttpOnlyCookie(true);
                serializer.setUseSecureCookie(true);
                return serializer;
        }
       ※setCookiePath、setDomainNameは指定なし。デフォルト設定に任せてます。

(2017/11/17追記)
CookieのKeyに予約語(PathやDomain等)が使われていると、DefaultCookieSerializerでエラーが発生します。
下記記事の方法で対応しました。
Cookie name "Path" is a reserved token



PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字