出於安全原因,我們想要在我們的應用程序中通過IP地址阻止用戶,如果他們試圖以管理員身份登錄並且他們輸入了錯誤的密碼3次。如何用Seam和JBoss AS阻止IP?
獲取試圖登錄的用戶的IP地址非常容易。我使用這段代碼來獲取IP:我們使用JBoss 5.1.0 GA和Seam 2.2.1.CR2。據我所知,在Seam中沒有辦法阻止IP地址。但是有可能調用JBoss函數來阻止特定的IP?
請讓我知道,如果接縫有這個:)
出於安全原因,我們想要在我們的應用程序中通過IP地址阻止用戶,如果他們試圖以管理員身份登錄並且他們輸入了錯誤的密碼3次。如何用Seam和JBoss AS阻止IP?
獲取試圖登錄的用戶的IP地址非常容易。我使用這段代碼來獲取IP:我們使用JBoss 5.1.0 GA和Seam 2.2.1.CR2。據我所知,在Seam中沒有辦法阻止IP地址。但是有可能調用JBoss函數來阻止特定的IP?
請讓我知道,如果接縫有這個:)
這應該很容易做到。
假設你有一個應用程序作用域的設置與所有你想要阻止,您可以使用此過濾器的IP的:
@Startup
@Scope(ScopeType.APPLICATION)
@Name("ipFilter")
@BypassInterceptors
@Filter(around ="org.jboss.seam.web.ajax4jsfFilter")
public class IpFilter extends AbstractFilter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
if (!(req instanceof HttpServletRequest)) {
chain.doFilter(req, res);
return;
}
HttpServletRequest request = (HttpServletRequest) req;
Set<String> ips = (Set<String>)Component.getInstance("blockedIps");
if(ips.contains(request.getRemoteAddr())) {
throw new ServletException("Permission denied");
}
chain.doFilter(req, res);
}
}
我不知道什麼對於一些支持。但是您可以創建一個簡單的Filter(javax.servlet.Filter)並阻止來自一組IP的請求。這很簡單。
如果你的Jboss服務器前有一個Apache服務器,那麼調用request.getRemoteAddr();
就會給你提供Apache服務器的IP。
的Plinio如說,你可以使用過濾器。如果你不想這樣做,那麼你也可以使用page action。
感謝與X轉發換頭尖端。非常有用:) – 2010-09-20 11:13:23
有可能是拒絕訪問而不是拋出異常的更好方法。可能使用響應發送錯誤,但爲了簡單起見,我只是在代碼 – 2010-09-21 09:17:42
中顯示拋出異常。感謝這個偉大的答案,我會試一試。 :) – 2010-09-22 10:47:10
不客氣。 – 2010-09-22 11:30:07