6.2.12. HTTPリライトハンドラ¶
本ハンドラは、HTTPのリクエストおよびレスポンスに対して、リクエストパスとコンテンツパス、 および変数の書き換えを行う機能を提供する。 このハンドラは、「未ログイン状態の際は強制的にログイン画面に遷移させる」といった、特殊な 遷移が必要になった際に使用する。
本ハンドラでは、以下の処理を行う。
- リクエストパスの書き換えを行う
- コンテンツパスの書き換えを行う
処理の流れは以下のとおり。
6.2.12.2. モジュール一覧¶
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-fw-web</artifactId>
</dependency>
6.2.12.3. 制約¶
- HTTPレスポンスハンドラ より後ろに配置すること
- 本ハンドラで書き換えたコンテンツパスは、レスポンスハンドラにより使用される。 このため、本ハンドラは HTTPレスポンスハンドラ の後ろに配置する必要がある。
- スレッドコンテキスト変数管理ハンドラ より前に配置すること
- 本ハンドラでは、スレッドコンテキストに入れられるリクエストパスの書き換えを行う。 このため、本ハンドラは スレッドコンテキスト変数管理ハンドラ より前に配置する必要がある。
6.2.12.4. 書き換えの設定¶
書き換えの設定は、 本ハンドラ のプロパティ requestPathRewriteRules または contentPathRewriteRules に対して行う。
以下に設定例を示す。
<component class="nablarch.fw.web.handler.HttpRewriteHandler">
<!-- リクエストパスに対するリライトルール -->
<property name="requestPathRewriteRules">
<list>
<!-- サーブレットコンテキストルートへのアクセスに対して、
既にログインが成立していればメニュー画面へ遷移させる。 -->
<component class="nablarch.fw.web.handler.HttpRequestRewriteRule">
<property name="pattern" value="^/$" />
<property name="conditions">
<list>
<value>%{session:user.id} ^\S+$</value>
</list>
</property>
<property name="rewriteTo" value="/action/MenuAction/show" />
</component>
<!-- ログインが成立していない場合はログイン画面へ遷移させる。 -->
<component class="nablarch.fw.web.handler.HttpRequestRewriteRule">
<property name="pattern" value="^/$" />
<property name="rewriteTo" value="/action/LoginAction/authenticate" />
</component>
</list>
</property>
<!-- レスポンスのコンテンツパスに対するリライトルール -->
<property name="contentPathRewriteRules">
<list>
<!-- ステータスコードが401であった場合はログイン画面に遷移させる -->
<component class="nablarch.fw.web.handler.ContentPathRewriteRule">
<property name="pattern" value="^.*" />
<property name="rewriteTo" value="redirect:///action/LoginAction/authenticate" />
<property name="conditions">
<list>
<value>%{statusCode} ^401$</value>
</list>
</property>
</component>
</list>
</property>
</component>
この例からわかる通り、設定は HttpRequestRewriteRule (リクエストパスを書き換える場合)または ContentPathRewriteRule (コンテンツパスを書き換える場合)を使用して行う。
HttpRequestRewriteRule および ContentPathRewriteRule には、下記のプロパティが存在する。(プロパティは、スーパークラスの RewriteRule に定義されている。)
プロパティ名 | 説明 |
---|---|
pattern | 適用する対象のパスのパターン |
rewriteTo | 書き換え後の文字列 |
conditions | パス以外の追加の適用条件 |
exports | 変数の書き換え設定 |
HttpRequestRewriteRule および ContentPathRewriteRule では、conditionsの設定に変数を使用できる。 HttpRequestRewriteRule 、 ContentPathRewriteRule それぞれで使用可能な変数は下記の通り。
変数種別 | 書式 | 適用可能なクラス |
---|---|---|
セッションスコープ | %{session:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
リクエストスコープ | %{request:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
スレッドコンテキスト | %{thread:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
リクエストパラメータ | %{param:(変数名)} | HttpRequestRewriteRule |
HTTPヘッダ | %{header:(ヘッダー名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
HTTPリクエストメソッド | %{httpMethod} | HttpRequestRewriteRule |
HTTPバージョン | %{httpVersion} | HttpRequestRewriteRule |
全リクエストパラメータ名 | %{paramNames} | HttpRequestRewriteRule |
ステータスコード | %{statusCode} | ContentPathRewriteRule |
6.2.12.5. 変数に値を設定¶
HTTPリライトハンドラでは、パスの書き換え以外に リクエストスコープ、セッションスコープ、 スレッドコンテキスト、ウィンドウスコープへ変数を設定できる。
変数を設定するには、HttpRequestRewriteRule または ContentPathRewriteRule の export プロパティを設定する。
以下に設定例を示す。
<!--リファラヘッダが送信された場合は、リクエストスコープにその値を設定する。-->
<component class="nablarch.fw.web.handler.HttpRequestRewriteRule">
<!-- 全リクエストを対象とする。 -->
<property name="pattern" value=".*" />
<!-- リファラヘッダが定義されていた場合のみ適用する。-->
<property name="conditions">
<list>
<value>%{header:Referer} ^\S+$</value>
</list>
</property>
<!-- リクエストスコープ上の変数 prevUrl に、リファラヘッダの値を設定する。-->
<property name="exports">
<list>
<value>%{request:prevUrl} ${header:Referer}</value>
</list>
</property>
</component>
このように、 exports プロパティに 「設定する変数名」(上記例の場合、”%{request:prevUrl}”)と 「設定する値」(上記例の場合 “${header:Referer}”)をリストで設定することで、各スコープへ変数の 設定ができる。
exports で、「設定する変数名」に設定できる変数スコープは下記の通り。
変数スコープ | 書式 | 対象 |
---|---|---|
セッションスコープ | %{session:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
リクエストスコープ | %{request:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
スレッドコンテキスト | %{thread:(変数名)} | HttpRequestRewriteRule / ContentPathRewriteRule |
ウィンドウスコープ | %{param:(変数名)} | HttpRequestRewriteRule |