2017-08-29 67 views
1

我在我的Web應用程序中只能由管理員訪問的頁面。我寫過濾器,但我不明白如果用戶不是管理員,如何從過濾器返回HTTP錯誤代碼(403)。如何從servlet過濾器返回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

你需要投servletResponseHttpServletResponse第一:

HttpServletResponse response = (HttpServletResponse) servletResponse; 

然後用其sendError()方法:

response.sendError(HttpServletResponse.SC_FORBIDDEN); 

SC_FORBIDDEN代表代碼403

順便說一句,你不」 t 重定向到403頁,您只需回覆該狀態。如果你這樣做,servlet容器將爲用戶提供一個特殊的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頁的有趣設計來澄清情況 –