リクエストをフィルターからログインページにリダイレクトする方法を探していますが、サーブレットからリダイレクトする方法がわかりません。検索しましたが、sendRedirect()
メソッドが見つかりました。フィルターの応答オブジェクトにこのメソッドが見つかりません。原因は何ですか?どうすれば解決できますか?
Filterでは、応答はServletResponse
ではなくHttpServletResponse
であるため、HttpServletResponse
にキャストします。
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");
コンテキストパスを使用する場合:
httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");
また、最後にreturn;
を呼び出すことを忘れないでください。
フィルターからログインページにリクエストをリダイレクトする方法を探しています
しない
あなたはただ呼び出す
chain.doFilter(request, response);
フィルタから、通常のフローが先に進みます。
サーブレットからリダイレクトする方法がわかりません
使用できます
response.sendRedirect(url);
サーブレットからリダイレクトする
ハッシュを保持してパラメーターを取得したい場合は、次のようなことができます(フィルターの初期化で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);
}
ServletResponse response
はinstanceof HttpServletResponse
そのようです:
if (response instanceof HttpServletResponse) {
response.sendRedirect(....);
}
応答オブジェクトはServletResponse
として宣言されます。 sendRedirect()
メソッドを使用するには、HttpServletResponse
にキャストする必要があります。これは、HTTPプロトコルに関連するメソッドを追加する拡張インターフェースです。