JAVA如何限制用户IP地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA如何限制用户IP地址?相关的知识,希望对你有一定的参考价值。

限制一部分IP段用户访问。

java web中限制访问的ip,主要是使用session的getRemortIP(HttpServletRequest)方法,如下代码:

/**

* @param request
* @return

* 功 能 :得到用户Ip地址
*/
public static String getRemortIP(HttpServletRequest request) 
if (request.getHeader("x-forwarded-for") == null) 
return request.getRemoteAddr();

return request.getHeader("x-forwarded-for");


调用 

String ip = getRemortIP(HttpServletRequest);
if(ip == "127.0.0.1")
System.out.print("禁止访问");


Hr完整项目中 --- common.jsp 得到网址

<%
//路径
String path = request.getContextPath();
// request 保存
request.setAttribute("path",path);
%>
参考技术A

在用户登录时,得到用户的ip地址,只让指定的ip能登录

String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 
ip = request.getHeader("Proxy-Client-IP");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 
ip = request.getHeader("WL-Proxy-Client-IP");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 
ip = request.getRemoteAddr();

参考技术B request.getRemoteAddr();得到IP地址。然后用split(“.”)方法用点把IP地址隔开。然后就可以做限制操作了! 参考技术C 首先设置一个白名单表,
当用户访问的时候,你就获取用户的ip地址,是否在白名单表中,如果不存在,则不予理睬
参考技术D 你的意思是把一个Set放到session里用来记录IP吗?

感觉好像放到session里不行啊,因为session只是某个ip的用户和应用的一次会话,一般情况下关掉浏览器就没了,如果该用户再次访问该应用的时候就是另外一个session了(session id不同),因此笼统的说,对于同一个ip来说,都可以建立无数个session,那怎么能让session里的一个对象保存不同ip信息呢?这样的话 ,这个Set里永远只可能有一个ip,就是访问用户的ip.

是不是可以考虑放到application里或者干脆存到数据库里?

如何在 Java Web 应用程序中限制客户端 IP 地址

【中文标题】如何在 Java Web 应用程序中限制客户端 IP 地址【英文标题】:How to restrict client IP address in Java Web Application 【发布时间】:2016-02-25 04:33:06 【问题描述】:

我需要根据客户端 IP 地址限制我的视图,我有静态 IP 地址列表,我只想向那些在我的 java Web 应用程序中注册 IP 地址的人显示视图

【问题讨论】:

基于 IP 地址的限制通常不是一个好主意。客户端可以轻松隐藏或更改其 IP,因此最好使用某种身份验证。 【参考方案1】:

取决于您希望如何实现过滤。

    您可以使用过滤器,该过滤器将验证并仅将请求转发到 Servlet 在 Servlet/Controller 中,您可以编写检查以控制重定向到有效 JSP 或错误 JSP 在 servlet 上下文中加载列表并使用它来检查是否在 JSP 中显示内容。

如果我是你,我会使用过滤器,这样你甚至不用接触带有该 IP 的 Servlet 层。

查看此链接以了解 Servlet 过滤器 - http://docs.oracle.com/javaee/6/tutorial/doc/bnagb.html

【讨论】:

我需要通过 javascript 获取 IP 地址,我该怎么做? @DanialSaeed 由于安全原因,无法从 JS 中获取客户端的 IP 地址。一种选择是调用将返回 IP 地址的 servlet。【参考方案2】:

这取决于你想做什么。

除其他外,您可以仅通过配置服务器来过滤(限制)您的应用程序视图到某些 IP。

如何做取决于服务器。

例如,对于 Tomcat,您需要编辑 context 中的 org.apache.catalina.valves.RemoteAddrValve(文件名:context.xml)。 也可以看看: http://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Remote_Address_Filter

这种方法的优点是可以完全隔离 从IP过滤应用程序开发。你可以申请 过滤到多个应用程序。 缺点是与基于应用程序的解决方案相比,它的灵活性和可定制性较差。

【讨论】:

以上是关于JAVA如何限制用户IP地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Amazon API Gateway (JAVA) 检索用户的公共 IP 地址

如何限制远程桌面的登陆IP?

干货|IP地址修改器如何更改IP

Golang 绑定mac和ip地址,限制服务器

java中如何获取用户的IP地址及禁止此人

如何在 MySQL 中找到当前用户连接的 IP 地址?