5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mod_mrubyを使ってPOSTされたBODYの中からある項目を抽出してCookieに埋め込んでみる

Posted at

すでに構築したものの追加要望で、あるサイトからPOSTされたBODYの中から特定の項目を抽出してCookieに埋め込んでほしいというものがあり、その方法を模索して今回の件名にたどり着きました。

前提事項

  • Apache 2.2のモジュールを使って実現できること(できるだけ)
  • ApacheのBackendにあるアプリケーションサーバには変更を加えない
  • FormでPOSTされた情報から抽出し、Keyは柔軟に変更できなければならない

考えたこと

当初はApacheのmod_rewriteで下記のようにできないかとか考えてたんだけど(渡される値がURLにあると勘違いしてた)、ちょっと調べた限りではそれは難しそうだと断念。少なくともBODYの中身まで見てCookieに埋め込むようなことはできないなぁと。

RewriteEngine On
RewriteRule "^/index\.html\?KEY=(.+)" "-" [CO=key:$1:1440:/]

で、ちょっと前にngx_mrubyを弄ったことがあって、そういえばApache版もあったことを思い出し、実際にやってみた結果うまくいったのでその内容を下記に記載します。

導入手順

mod_mrubyのページに書いてあるとおりDocker使えば楽なのですが、今回はすでに構築されているApacheに対して適用しなければならないので、Dockerでない方法で確認します。基本的に記載のとおりにやれば問題なくインストールできます。

なお、依存モジュールがあるので、その点のみ注意です。

sudo apt-get install openssh-server git curl apache2 apache2-dev apache2-utils rake ruby2.0 ruby2.0-dev bison libcurl4-openssl-dev libhiredis-dev libmarkdown2-dev libcap-dev libcgroup-dev

設定内容

下記設定で確認しました。 mrubyInsertFilterFirst を使っていますが、ほかのDirectiveでも動作するかもしれません。また、r.filenameを使ってリダイレクトもしています。

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost>
    〜略〜
    <Location /login/>
        mrubyInsertFilterFirst /path/to/mruby/set-cookie.rb
    </Location>
    〜略〜
</VirtualHost>
/path/to/mruby/set-cookie.rb
r = Apache::Request.new
s = Apache::Server.new
hout = Apache::Headers_out.new
if r.body.to_s =~ /KEY=(.+)/
  hout["Set-Cookie"] = "key=#{$1}; path=/; expires=EXPIRATION_DATE"
end
r.filename = s.document_root + "REDIRECT"
Apache.return(Apache::OK)
<form method="POST" action="http://TARGET_SERVER/login/">
  <input type="text" name="KEY" value="VALUE" />
  <input type="submit"/>
</form>

ChromeのデベロッパーツールでCookieがセットされていること確認できました。

使ってみて

mod_mrubyはかゆいところに手が届く、すばらしいソフトウェアです。他にもいろいろカバーしている機能があり、もっともっと活用できそうです。この場を借りて、mruby、mod_mrubyを開発されたみなさま(特にまつもとさんと松本さん)に感謝いたします。いやぁ、ほんと助かりました。

注意

動作は確認していますが、保証するものではありません。実際お試しになる場合は正しく動作しない可能性もありますので、ご留意ください。
内容で間違っている部分等ありましたらご指摘いただけるとうれしいです。

参考にさせていただいたサイト

その他いろいろなサイトを徘徊して調べました。Apache, mod_mrubyについて情報を公開してくださっているみなさまに感謝です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?