Servlet3.0下@WebFilter注記設定Filter
Servlet3.0下@WebFilter注記設定Filter
Filter(フィルタ)は、主に要求が到着する前に処理し、要求が終了した後に処理してもよい.チェーン式と同様である.1つの要求は複数のフィルタによってブロックされ、各Filterに順次進み、サーブレットに入るまで放行され、サーブレット処理要求が終了した後、各Filterに戻って後続のコードを実行し続け、先に実行したFilter後に実行される.
よく使われる場所:ユーザ権限フィルタ ログ 文字符号化処理 Filterの設定:@WebFilter注記 web.xmlでの構成 @WebFilter共通プロパティ
ツールバーの
を選択します.
必要かどうか
説明
asyncSupported
boolean
いいえ
Filterが非同期モードをサポートするかどうかを指定します
dispatcherTypes
DispatcherType[]
いいえ
Filterがどの方式のリクエストをフィルタするかを指定します.サポートする属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST;すべてのメソッドをデフォルトでフィルタするリクエスト
filterName
String
いいえ
Filter名
initParams
WebInitParam[]
いいえ
構成パラメータ
displayName
String
いいえ
Filter表示名
servletNames
String[]
いいえ
どのサーブレットをフィルタするかを指定します
urlPatterns/value
String[]
いいえ
2つのアトリビュートは同じ役割を果たし、ブロックするパスを指定します.
ユーザー権限フィルタの例:
1.方式一,@WebFilter注記方式
カスタムフィルタjavaxを実現する.servlet.Filterインタフェースは、注釈で構成されています.すべてのリクエストをブロックし、ログインページ、ログイン操作リクエストを放行し、残りのリクエストはログイン後にアクセスする必要があります.同時にパラメータを構成し、行のパスと要求の文字セットを指定します.
2.方式二、web.xml方式構成
Webでxmlファイルの中で配置して、方式の1の中の@WebFilterの注釈を取り除いて、残りのコードは同じです
3.注
(1).Filterとサーブレットは似ていて、属性や構成方式からサーブレットの強化版と理解できる.
(2).Filterにおける権限のフィルタリング、文字符号化の処理、ログの記録は、各サーブレットにおける重複コードの抽出と見なすことができる.
(3).文字符号化の処理についてrequest.setCharacterEncoding()はpost方式の要求に有効である.get方式の場合、new String(xxx.getBytes(「iso-8859-1」)、「utf-8」)を使用して処理できます.そうしないと、フォームの中国語が文字化けします.requestを通過するたびにプロキシ方式を用いるもよい.getParameter()時に自動的に符号化処理を行う.
Filter(フィルタ)は、主に要求が到着する前に処理し、要求が終了した後に処理してもよい.チェーン式と同様である.1つの要求は複数のフィルタによってブロックされ、各Filterに順次進み、サーブレットに入るまで放行され、サーブレット処理要求が終了した後、各Filterに戻って後続のコードを実行し続け、先に実行したFilter後に実行される.
よく使われる場所:
ツールバーの
を選択します.
必要かどうか
説明
asyncSupported
boolean
いいえ
Filterが非同期モードをサポートするかどうかを指定します
dispatcherTypes
DispatcherType[]
いいえ
Filterがどの方式のリクエストをフィルタするかを指定します.サポートする属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST;すべてのメソッドをデフォルトでフィルタするリクエスト
filterName
String
いいえ
Filter名
initParams
WebInitParam[]
いいえ
構成パラメータ
displayName
String
いいえ
Filter表示名
servletNames
String[]
いいえ
どのサーブレットをフィルタするかを指定します
urlPatterns/value
String[]
いいえ
2つのアトリビュートは同じ役割を果たし、ブロックするパスを指定します.
ユーザー権限フィルタの例:
1.方式一,@WebFilter注記方式
カスタムフィルタjavaxを実現する.servlet.Filterインタフェースは、注釈で構成されています.すべてのリクエストをブロックし、ログインページ、ログイン操作リクエストを放行し、残りのリクエストはログイン後にアクセスする必要があります.同時にパラメータを構成し、行のパスと要求の文字セットを指定します.
@WebFilter(filterName = "loginFilter",
urlPatterns = "/*",
initParams = {
@WebInitParam(name = "loginUI", value = "/home/loginUI"),
@WebInitParam(name = "loginProcess", value = "home/login"),
@WebInitParam(name = "encoding", value = "utf-8")
})
public class LoginFilter implements Filter {
private FilterConfig config;
@Override
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
//
String loginUI = config.getInitParameter("loginUI");
String loginProcess = config.getInitParameter("loginProcess");
String encoding = config.getInitParameter("encoding");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// (post )
request.setCharacterEncoding(encoding);
// http:// :
String uri = request.getRequestURI();
if (uri.contains(loginUI) || uri.contains(loginProcess)) {
// ,
chain.doFilter(request, response);
} else {
if (request.getSession().getAttribute("user") == null) {
//
response.sendRedirect(request.getContextPath() + loginUI);
} else {
// ,
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
this.config = null;
}
}
2.方式二、web.xml方式構成
Webでxmlファイルの中で配置して、方式の1の中の@WebFilterの注釈を取り除いて、残りのコードは同じです
loginFilter
cn.edu.njit.filter.LoginFilter
loginUI
/home/loginUI
loginProcess
home/login
encoding
utf-8
loginFilter
/*
3.注
(1).Filterとサーブレットは似ていて、属性や構成方式からサーブレットの強化版と理解できる.
(2).Filterにおける権限のフィルタリング、文字符号化の処理、ログの記録は、各サーブレットにおける重複コードの抽出と見なすことができる.
(3).文字符号化の処理についてrequest.setCharacterEncoding()はpost方式の要求に有効である.get方式の場合、new String(xxx.getBytes(「iso-8859-1」)、「utf-8」)を使用して処理できます.そうしないと、フォームの中国語が文字化けします.requestを通過するたびにプロキシ方式を用いるもよい.getParameter()時に自動的に符号化処理を行う.