ログインしていないページなどに飛んできた時に便利ですよね。
サーブレットフィルターを使って、別画面へリダイレクトさせるサンプル
サーブレットフィルターを使って、別画面(JSP)へリダイレクトします。
TestFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.io.IOException; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletResponse; public class TestFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { System.out.println("filter:前処理など"); if(isAuthenticated()) { //フィルタ・サーブレット呼び出し chain.doFilter(req, resp); }else { //ログインなどにリダイレクト ((HttpServletResponse)resp).sendRedirect("./test.jsp"); } System.out.println("filter:後処理など"); } private boolean isAuthenticated() { return false; } } |
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <web-app> <filter> <filter-name>TestFilter</filter-name> <filter-class>TestFilter</filter-class> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/test</url-pattern> </filter-mapping> </web-app> |
実行結果
サーブレットフィルターからリダイレクトされた別画面(JSP)が表示されます。
ここでは、リダイレクト先はtest.jspです。
サンプルの解説
サーブレットフィルターは、その名の通り、フィルターです。
サーブレットが動作する「前」と「後」で呼び出されます。
ですので、サーブレットの前処理、後処理なんかも書くことができます。
こんな感じで、認証されていないときなどに、別の画面に飛ばしたりします。
FilterChain#doFilter(ServletRequest,ServletResponse)は、このフィルターは通過してOKなときに使います。
これで、他のフィルターや目的のサーブレットが呼び出されます。
この例では、認証(?)が常にNGなので、サーブレットは呼び出されず、常にtest.jspに飛んでいきます。