楼上的方法是不合理的。第一,如果用户使用代理,是无法获得真实Ip的0;第二,IF语句不能保证禁止IP,而且很多网站并不需要登录的。给楼主些方法,可供参考。
创新互联是专业的剑川网站建设公司,剑川接单;提供网站设计、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行剑川网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
1。 获取用户IP
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
这种方法总是获得用户的真实IP
2。禁止IP,可以考虑从服务器下手
(1) 如果用的是tomcat,那么在tomcat_home/conf/server.xml中的host/host之间加一行代码:
Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.1.1"/
这样192.168.1.1这个ip访问webapp时会收到 403 错误
(2) 如果是apache那么:
Directory /var/web/dir1
Allow from all
Deny from 111.111.111.111
/Directory
上面限制单个IP,限制IP段用*号代替。如111.111.111.*
(3) 或者楼主也可以像楼上说的用代码实现,给你个JS代码:
SCRIPT LANGUAGE="java script"
!-- Begin
netscape = (navigator.appName.indexOf("Netscape") != -1);
version4 = (navigator.appVersion.indexOf("4.") != -1);
if (netscape version4) {
ip = "" + java.net.InetAddress.getLocalHost().getHostAddress();
if (ip.indexOf("235.12") = -1)
// 这是想要禁止访问的IP例如: 235.12.xxx.xxx
{
alert("You are not permitted to access this site.");
history.go(-1);
}
}
// End --
/script
将以上代码加入到head区域中。
在数据库表中增加一个字段,记录用户登录的ip,在每次登录的时候都检测一下该字段是否为空,如果不为空,那么比较数据库中登录的ip是否跟当前ip相同,如果不同,那么强行登录的话就将新的ip记录写到数据库中。
写一个过滤器,每次在访问Action的时候都判断当前的ip和数据库中的是否相同,如果不同,那么就强制下线,这样就限制了另外一个用户的访问。
用户在自己退出的时候清空数据库中的ip记录,这样就能保证不影响下次登录。
还有一种方式就是在每个页面都写一个定时,每隔一定时间就向服务器发送一次请求判断当前ip与数据库中保存的ip是否相同,如果不同就强制下线。但是这种方式比较耗费连接。
利用字段切割
String a="192.168";
String[] b=a.split(".");
然后重组将二三段用*来替代