Как заблокировать IP с помощью Seam и JBoss AS? - PullRequest
2 голосов
/ 16 сентября 2010

из соображений безопасности мы хотим заблокировать пользователей по IP-адресу в нашем приложении, если они пытаются войти в систему как администратор и вводят неверный пароль 3 раза.

Очень легко получить IP-адрес пользователя, пытающегося войти в систему. Я использую этот фрагмент кода, чтобы получить IP:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)context.getRequest();
String ip = request.getRemoteAddr();

Мы используем JBoss 5.1.0 GA и Seam 2.2.1.CR2. Насколько я знаю, в Seam нет способа заблокировать IP-адреса. Но можно ли вызвать функции JBoss для блокировки определенного IP?

Пожалуйста, дайте мне знать, если Seam имеет некоторую поддержку для этого:)

Ответы [ 3 ]

3 голосов
/ 21 сентября 2010

Это должно быть очень легко сделать.

Предполагая, что у вас есть область приложения, в которую входят все 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);

    }
}
2 голосов
/ 20 сентября 2010

Если у вас есть сервер Apache перед вашим сервером Jboss, то вызов request.getRemoteAddr(); просто даст вам IP-адрес сервера Apache.

Вместо этого используйте заголовок X-Forwarded-For

Как говорит Плинио, вы можете использовать фильтр.Если вы не хотите этого делать, вы также можете использовать действие page .

1 голос
/ 16 сентября 2010

Я ничего не знаю для этого. Но вы можете создать простой фильтр (javax.servlet.Filter) и блокировать запросы от набора IP-адресов. Это действительно просто.

...