public class ExtensionFilter extends Object implements javax.servlet.Filter
Filterの初期化パラメータaccess.control.prohibited.extensionで指定された、
禁止拡張子をもつパスへのアクセス要求に対しSC_NOT_FOUND(404)エラーを返す。
これにより、当該拡張子を持つファイルへの直接アクセスを禁止する。
禁止拡張子へのアクセス制限を行う場合でそのチェック対象から外したい
特別なパスがあれば、Filterの初期化パラメータrestrictionEscape
の値として定義することで、チェック非対象のパスを定義できる。
直接アクセス禁止対象の拡張子、およびアクセス禁止対象から外したいパスが
複数ある場合、改行区切りで指定すること。
この機能を使用するには デプロイメントディスクリプタ(web.xml)に
以下のように設定する。
<filter>
<filter-name>extensionFilter</filter-name>
<filter-class>jp.terasoluna.fw.web.thin.patch.ExtensionFilter</filter-class>
<!-- (1) アクセス禁止となる拡張子の一覧 -->
<init-param>
<param-name>access.control.prohibited.extension</param-name>
<param-value>
.jsp
.csv
.pdf
</param-value>
</init-param>
<!-- (2) チェック対象外となるリクエストパスの一覧 -->
<init-param>
<param-name>restrictionEscape</param-name>
<param-value>
/sample/logon/index.jsp
/sample/error/error.jsp
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>extensionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
| 修飾子とタイプ | フィールドと説明 |
|---|---|
static String |
EXTENSION_THRU_KEY
リクエストがフィルタを通過したことを示すリクエスト属性のキー。
|
private static org.apache.commons.logging.Log |
log
ログクラス。
|
private static String |
PROHIBITED_EXTENSION_KEY
Filterの初期化パラメータから取得する、直接アクセスを禁止する拡張子のキー。
|
private List |
prohibitedExtensionList
Webブラウザからの直接アクセスを禁止する拡張子のリスト。
|
static String |
RESTRICTION_ESCAPE_KEY
Filterの初期化パラメータから取得する、拡張子制限チェックを対象外にするパスのキー。
|
private List |
restrictionEscapePaths
拡張子制限チェックの対象外となるパスのリスト。
|
| コンストラクタと説明 |
|---|
ExtensionFilter() |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
destroy()
フィルタ処理時に呼び出される。
|
void |
doFilter(javax.servlet.ServletRequest req,
javax.servlet.ServletResponse res,
javax.servlet.FilterChain chain)
拡張子チェックを行う。
|
protected String |
getExtension(String name)
指定された文字列から末尾の拡張子を取得する。
|
void |
init(javax.servlet.FilterConfig config)
フィルタがサービス開始状態になる際に、コンテナによって呼び出される。
|
protected Set |
resolveAccessControlPath(javax.servlet.ServletRequest request)
リクエストから、アクセス制御用のパスを解決する。
|
public static final String EXTENSION_THRU_KEY
public static final String RESTRICTION_ESCAPE_KEY
private static org.apache.commons.logging.Log log
private static final String PROHIBITED_EXTENSION_KEY
private List prohibitedExtensionList
private List restrictionEscapePaths
public void init(javax.servlet.FilterConfig config)
throws javax.servlet.ServletException
init インタフェース内 javax.servlet.Filterconfig - FilterConfigインスタンス。javax.servlet.ServletException - 初期化異常時にスローされる例外。Filter.init(javax.servlet.FilterConfig)public void doFilter(javax.servlet.ServletRequest req,
javax.servlet.ServletResponse res,
javax.servlet.FilterChain chain)
throws IOException,
javax.servlet.ServletException
doFilter インタフェース内 javax.servlet.Filterreq - HTTPリクエストres - HTTPレスポンスchain - フィルタチェーンIOException - I/Oエラーjavax.servlet.ServletException - サーブレット例外Filter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)public void destroy()
destroy インタフェース内 javax.servlet.FilterFilter.destroy()protected String getExtension(String name)
name - 拡張子つきの名前protected Set resolveAccessControlPath(javax.servlet.ServletRequest request)
HttpServletRequest.getServletPath()HttpServletRequest.getServletPath() + HttpServletRequest.getPathInfo()HttpServletRequest.getPathInfo()がnullの場合は、1のみを戻り値のSetに含む。HttpServletRequest.getPathInfo()がnullでない場合は、1と2の両方を戻り値のSetに含む。Setはnot nullであること。request - HTTPリクエストCopyright © 2015. All rights reserved.