【问题标题】:How to block an IP with Seam and JBoss AS?如何使用 Seam 和 JBoss AS 阻止 IP?
【发布时间】:2011-04-13 02:47:06
【问题描述】:

出于安全原因,如果用户尝试以管理员身份登录并且输入错误密码 3 次,我们希望在我们的应用程序中通过 IP 地址阻止用户。

获取尝试登录的用户的 IP 地址非常容易。我使用这段代码sn-p来获取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 对此有一些支持,请告诉我 :)

【问题讨论】:

    标签: java jboss seam block


    【解决方案1】:

    这应该很容易做到。

    假设您有一个应用程序范围集,其中包含您想要阻止的所有 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】:

    如果你的 Jboss 服务器前面有一个 Apache 服务器,那么调用 request.getRemoteAddr(); 只会给你 Apache 服务器的 IP。

    改为使用X-Forwarded-For header

    正如 Plinio 所说,您可以使用过滤器。如果您不想这样做,也可以使用page action

    【讨论】:

    • 感谢带有 x-forwarded-for 标头的提示。非常有用:)
    【解决方案3】:

    我对此一无所知。但是您可以创建一个简单的过滤器 (javax.servlet.Filter) 并阻止来自一组 IP 的请求。这真的很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多