2017-08-29 12 views
1

Webアプリケーションに管理者だけがアクセスできるページがあります。フィルターを書きましたが、ユーザーが管理者でない場合、HTTPエラーコード(403)をフィルターから戻す方法がわかりません。サーブレットフィルタからHTTPエラーコードを返す方法は?

public class AdminFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
     String username = servletRequest.getParameter("username"); 
     String password = servletRequest.getParameter("password"); 

     UserDao userDaoImpl = new UserDaoImpl(); 
     if(userDaoImpl.findByUsername(username).getPassword().equals(password)) { 
      filterChain.doFilter(servletRequest, servletResponse); 
     } else { 
      //respond with 403 
     } 
    } 
} 

私は私のカスタム403ページにリダイレクトすることができることを理解し、私はHTTPエラーコードを返す方法と思いまして。

答えて

3

あなたがHttpServletResponse最初にservletResponseをキャストする必要があります。

HttpServletResponse response = (HttpServletResponse) servletResponse; 

そして、そのsendError()メソッドを使用します。ところで、コード403

ため

response.sendError(HttpServletResponse.SC_FORBIDDEN); 

SC_FORBIDDENスタンドを、あなたは「ドンt を403ページにリダイレクトすると、そのステータスで返信するだけです。これを行うと、サーブレットコンテナは特別な403ページをユーザに提供します。あなたのweb.xmlでそのページを設定することができます。

<error-page> 
    <error-code>403</error-code> 
    <location>/error-403.htm</location> 
</error-page> 

これは、あなたが403のステータスを設定する場合、カスタムページ/error-403.htmを提供するためにコンテナに指示します。

リダイレクトを希望する場合は、response.sendRedirect()(302リダイレクトを発行)を使用できます。

+0

"リダイレクトしない"部分はありません。面白いデザインのカスタム403ページが必要な場合はどうすればよいですか?私はその地位に応じる必要があり、この地位にページで応答するものが必要ですか? – Artmal

+0

面白いデザインの403ページで状況をクリアするための答えを更新しました –

関連する問題