Url Rewrite Filter

Url Rewrite Filterを使ってjsessionidの付与を細かく調整する方法。いつも使い方を忘れてしまうのでメモ。

Javaコンテナでは、Cookieが機能しないUserAgentではjsessionidをURL(HTML内のURL全て)に自動付与してSESSIONを保つようにするが、次のような問題がある。

・検索エンジンにjsessionidもろともインデックスされてしまう。
・画像などの静的コンテンツをJavaコンテナ以外(フロントのWebサーバなど)に配置した場合、jsessionidがジャマをしてGETできない。
(Cookie対応ブラウザでも、初回アクセス時には付与されて同じ問題が発生)

これらの問題を除去するのに、Url Rewrite Filterを使う。
http://www.tuckey.org/urlrewrite/

Lift2.0+Jetty6でも普通に利用できた。

■WEB-INF/web.xml

<web-app>

<filter>
  <filter-name>LiftFilter</filter-name>
  <filter-class>net.liftweb.http.LiftFilter</filter-class>
</filter>
<filter>
  <filter-name>UrlRewriteFilter</filter-name>
  <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>UrlRewriteFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>LiftFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

■WEB-INF/urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">

<urlrewrite>
  <!-- 検索エンジンにjsessionidをインデックスさせない-->
  <outbound-rule enabled="true" encodefirst="true">
    <condition name="user-agent">Googlebot.*</condition>
    <from>(.*);jsessionid=[0-9A-Za-z]+</from>
    <to>$1</to>
  </outbound-rule>
  <outbound-rule enabled="true" encodefirst="true">
    <condition name="user-agent">Mediapartners-Google</condition>
    <from>(.*);jsessionid=[0-9A-Za-z]+</from>
    <to>$1</to>
  </outbound-rule>
  <outbound-rule enabled="true" encodefirst="true">
    <condition name="user-agent">Adsbot-Google</condition>
    <from>(.*);jsessionid=[0-9A-Za-z]+</from>
    <to>$1</to>
  </outbound-rule>

  <!-- 画像ファイルからjsessionidを除去 -->
  <outbound-rule enabled="true" encodefirst="true">
    <from>(.*[png|gif|jpg]);jsessionid=[0-9A-Za-z]+</from>
    <to>$1</to>
  </outbound-rule>
</urlrewrite>

Url Rewrite Filterは本来、RewriteEngineのJavaポートなので、RewriteEngineでできることは大体できる。バージョン3.2では、urlrewrite.xmlではなく、WEB-INF/.htaccess を記述しても動作するようだ(未検証)。

意外と便利かもと思ったのは、3.2の機能で、ある条件のときにRequest Attributeを追加できたりする。

<rule>
  <condition name="user-agent">Mozilla/[1-4]</condition>
  <set type="request" name="browser">Mozilla</set>
</rule>

request.getAttribute("browser") // => "Mozilla"

URL関係で困ったことがあったらURL Rewrite Filterは便利。
ただ、jsessionidの付与ルールくらいはコンテナで制御できるようにして欲しいなっ


同じカテゴリのエントリ
1.Lift再入門 / 8.javascriptからsubmitできない / 7.Ajax Form / 6.Radio、Checkboxについて / 5.行列型の編集FORM / 4.サーバーサイドバリデーションとサーバサイド関数 / 3.ログインFORM - S.param使ったら負け / 2.Snippetメソッドとして許される型 / sbt0.12.xで依存jar抽出タスク / scala2.10+lift2.5+NetBeans7.2 / Scalaで入門関数プログラミング / reactive-webを試してみました / Lift2.2M1のテンプレート機能 / Scala Compiler Plugin / View Bound/Context Bound / ScalaZa01参加してきました / Akka Frameworkチュートリアルの次 / Akka Frameworkチュートリアルその2 / Akka Frameworkチュートリアル / LiftでJCaptcha / Url Rewrite Filter / sbt-android-plugin / Android SDK for Scala / 祝Lift2.0リリース / Liftの携帯対応まとめ / Scala2.8への移行 / Lift 2.0-scala280-SNAPSHOT/sbt0.7.1 / Scalaお絵かき環境 - Kojo / Lift+Quartzでバッチ / Scala&Liftを採用した理由 / Liftでdate_select系ヘルパーを作る / LiftでAjax / LiftのSubmitかしこい / lift-mapperのpaginateを使う / snippetをspecする / Lift Mapperを拡張する / LiftのDBをMySQLに / Liftプロジェクト環境を整える / Scala本読み比べてみました / NetBeans6.7&scala / じつはScalaはライトな言語 / Scalaバザ~ル / lift1.0所感 / specsを読む / implicit def / ScalaならNetBeansがサイコー / scala勉強会@東北がスタート / それでも俺はLiftをやるってのか / Scala&Liftセットアップ / ブログリニューアル /
コメント
pomu0325
2010/12/31
Lift2.2からデフォルトではjsessionid付かなくなりました。意図的に付けたい場合はLiftRules.encodeJSessionIdInUrl_? = trueで。
武田ソフト
2011/01/03
情報ありがとうございます!

コメントしてください

closed.