web-dev-qa-db-ja.com

サーブレットフィルターにリダイレクトする方法

リクエストをフィルターからログインページにリダイレクトする方法を探していますが、サーブレットからリダイレクトする方法がわかりません。検索しましたが、sendRedirect()メソッドが見つかりました。フィルターの応答オブジェクトにこのメソッドが見つかりません。原因は何ですか?どうすれば解決できますか?

49
wasimbhalli

Filterでは、応答はServletResponseではなくHttpServletResponseであるため、HttpServletResponseにキャストします。

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");

コンテキストパスを使用する場合:

httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");

また、最後にreturn;を呼び出すことを忘れないでください。

73
Dead Programmer

フィルターからログインページにリクエストをリダイレクトする方法を探しています

しない

あなたはただ呼び出す

chain.doFilter(request, response);

フィルタから、通常のフローが先に進みます。

サーブレットからリダイレクトする方法がわかりません

使用できます

response.sendRedirect(url);

サーブレットからリダイレクトする

8
Jigar Joshi

ハッシュを保持してパラメーターを取得したい場合は、次のようなことができます(フィルターの初期化でredirectMapに入力します):

String uri = request.getRequestURI();

String[] uriParts = uri.split("[#?]");
String path = uriParts[0];
String rest = uri.substring(uriParts[0].length());

if(redirectMap.containsKey(path)) {
    response.sendRedirect(redirectMap.get(path) + rest);
} else {
    chain.doFilter(request, response);
}
6
user1079877

ServletResponse responseinstanceof HttpServletResponse そのようです:

if (response instanceof HttpServletResponse) {
    response.sendRedirect(....);
}
1
Buhake Sindi

応答オブジェクトはServletResponseとして宣言されます。 sendRedirect()メソッドを使用するには、HttpServletResponseにキャストする必要があります。これは、HTTPプロトコルに関連するメソッドを追加する拡張インターフェースです。

0
jan.vdbergh