java - 如何使用 Seam 和 JBoss AS 阻止 IP?

标签 java jboss seam block

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

很容易获得尝试登录的用户的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 对此有支持,请告诉我:)

最佳答案

这应该很容易做到。

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

    }
}

关于java - 如何使用 Seam 和 JBoss AS 阻止 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725180/

相关文章:

java - 调试 Java Web 应用程序

jboss - Wildfly 15.0.1 最终版本 : The controller is not available at localhost:9990

java - Seam 2 - 自定义范围

java - 具有属于不同类型 parent 的实体的类型

Java Android fragment ListView

jsp - JSP编译时出现 'tmpFile.renameTo(classFile) failed'的原因

java - 如何使用 session 工厂提高批量插入的性能

java - 奇怪的 "String index out of range: 0"错误

java - JSP Tomcat7 静态 css 和 js 文件未加载

java - WFLYEE0040 : A component named '...' is already defined in this module