2011-04-23 59 views
4

我正在使用jsf,ejbs和jpa構建一個Web應用程序。 我目前使用基於表單的j_security_check來處理認證。j_security_check vs程序安全

我需要實現對cookies的支持,即「記住我」選項。 另外我想防止蠻力攻擊。即5次登錄失敗後鎖定某個用戶。

據我所知,其他選項將做到這一點編程方式使用ServletFilters等

有沒有實現所有這些使用j_security_check的方法嗎?或者我應該切換回編程方式?

回答

0

這必須是圍繞j_security_check進行的自定義實現。您可以在會話連接一個Servlet過濾器j_security_check

<filter-mapping> 
    <filter-name>SecurityFilter</filter-name> 
    <url-pattern>/j_security_check</url-pattern> 
</filter-mapping> 

在SecurityFilter類,安全檢查返回userPrincipal後,設置進一步的細節和繼續。但是,如果userPrincipal爲null,則從數據庫中提取失敗計數,並將失敗消息(包括失敗計數)放入會話中,這可以在登錄頁面中顯示。

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 

    Principal userPrincipal = null; 
      String username = httpServletRequest.getParameter("j_username"); 
    String rememberme = httpServletRequest.getParameter("rememberme"); 
    chain.doFilter(request, response); 
    userPrincipal = httpServletRequest.getUserPrincipal(); 

記住我必須設置cookie,變量「rememberme」的值將在j_security_check完成後可用。基於登錄成功或失敗,可以設置cookie。