ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

PlayframeworkでCookieにsecureフラグを立てられない

Playframeworkが楽しいです。
最近、ごくごく小規模な案件でこのフレームワークを使って開発して納品しました。
その際にバグを見つけたのでそれについて書いておきます。


SSLで通信を行っている場合、レスポンスのset-cookieヘッダにsecureフラグを付与するのが普通だと思います。
これを付与する方法が、どうやら今のPlayframeworkにはありません。
warにしてTomcatなどのサーブレットコンテナにデプロイすれば、コンテナの設定でsecureフラグを付与できるはずだ、とも思ったのですが、これも上手く行きません。
なんでだろー、と思ってPlayのソースを眺めてたのですが、多分、Playの下記のソースに問題があるのではないかと思います。

package play.mvc;

{ 中略 }

/**
 * HTTP interface
 */
public class Http {

{ 中略 }

    /**
     * An HTTP Cookie
     */
    public static class Cookie implements Serializable {

        /**
         * Cookie name
         */
        public String name;
        /**
         * Cookie domain
         */
        public String domain;
        /**
         * Cookie path
         */
        public String path = "/";
        /**
         * for HTTPS ?
         */
        public boolean secure = false;  //ここじゃね!?
        /**
         * Cookie value
         */
        public String value;
        /**
         * Cookie max-age
         */
        public Integer maxAge;
        /**
         * Don't use
         */
        public boolean sendOnError = false;
    }

{ 後略 }

上記のsecureフィールドはデフォルトでfalseがセットされ、それ以降、一度もtrueになることはありません。
(クライアントからリクエストとして受け取ったsecureフラグについては、もらった値をそのまま上記フィールドにセットしているので、trueとして受け取ったsecureフラグをfalseに上書きしちゃう、みたいな問題にはなってない。あくまでPlayの乗ってるサーバ側からset-cookieしにいく際の問題。)


のあたりを下記MLでやりとりし、
http://groups.google.com/group/play-framework/browse_thread/thread/9d099406873dee14/74fefec1b2f3b31c?lnk=gst&q=HTTPS#74fefec1b2f3b31c
launchpadにバグ起票しました。
https://bugs.launchpad.net/play/1.1/+bug/567169
やりとりしてくれた@erwanは日本語も達者な人で、TwitterでPlayについてブツブツつぶやいてたら他にも色々親切に教えてくれました。ありがとう!

で、報告するばかりでは悪いので、このGW中に自分でもバグ修正してみようかと思ってたのですが、子供の世話でそこまでいかなかったので、ブログに書くことにした次第です。。

ちなみに納品したサービスについては、443番ポート以外をすべて閉じることでとりあえずの対応をしました。Playが早く直るといいなあ。




、そもそもPlayframeworkというのは、RoRライクなJava/Scala向けフレームワークのことです。
よくGRailsやらSAStrutsやらと比べて何がすごいの? とか言われてるっぽいです。
フレームワークについてまとまった記事としてはCodezineの下記記事なんかがあります。
http://codezine.jp/article/detail/4750



Playframeworkについて言及している日本語ブログというのは非常に少なく、
出始めの頃に光の速さで特徴をまとめてくださっているこの方とか↓
http://d.hatena.ne.jp/yuroyoro/20081120/1227148767
Scala関連の記事が充実しているこの方とか↓
http://wota.jp/ac/?date=20100503#p01
チュートリアルについて一通り試されているこの方とか↓
http://d.hatena.ne.jp/hamajyotan/20100201/1265040910
Playのgaeモジュールを試したこの方とか↓
http://k-nishijima.blogspot.com/2010/02/googleappengine.html
Playのドキュメントを日本語訳されてるこの方とか↓
http://d.hatena.ne.jp/garbagetown/20100429
くらいしか見当たりません。




でも、楽しいからみんな使うといいよ。
なにより、Play!っていう名前が可愛いし、ロゴとかデザインもいい感じだと思うから。

あ、あと、ServletAPIを使ってないところとか、男らしいよね。