出于安全原因,我们想要在我们的应用程序中通过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