- 浏览: 96991 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
抓不住的风316:
谢谢你的想法 让我从牛角尖中退了出来呵呵
超鏈接點擊次數的統計方法(超簡單) -
白色蜻蜓:
真是强人儿
UC++學習筆記代碼 -
myhongkongzhen:
RT kettas我這裡試驗室成功的,之前也是看了好多文章試驗 ...
win7下vm中linux網絡共享設置 -
kettas:
见过了,没有用过不晓得行不行。
win7下vm中linux網絡共享設置 -
lutian1984:
写的什么啊!有没有点正常人能看懂的东西啊
Struts2 + Pluto + portletV1.0(JSR 168) CRUD Demo
2009年5月7号 星期四 天气晴
今天完成了通过本机IP作为访问网站服务器限制条件的实现,主要是通过Filter来完成的,再加上struts2的应用,
通过读取IPINFO的配置文件,得到不受限制的IP或者是IP段,检测发来请求的客户端的IP地址,是否属于配置文件中的IP
段,如果属于,通过struts2配置,将其放行,可以正常访问网页,如果不属于,转到登录页面,如果登录成功,放行,否
则,退回登陆页面。
具体实现代码:
IPINFO配置文件
=============================我是分割线==============================
读取配置文件的代码 ReadIPInfoFileUtil2。java package g.cms.util; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.List; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Jane(吴贞贞) * @email myhongkongzhen@gmail.com * @since JDK 1.6 * @alter 2009年5月7号 * @version 1.0 2009年5月7号 */ public class ReadIPInfoFileUtil2 { private static final Log log = LogFactory.getLog(ReadIPInfoFileUtil2.class); private static Properties ipInfoPro = new Properties(); static { log.debug("IPInfo.properties loading..."); InputStream is = null; try { is = ReadIPInfoFileUtil2.class.getClassLoader() .getResourceAsStream("IPInfo.properties"); ipInfoPro.load(is); log.debug("cIPInfo.properties load success!"); } catch (IOException e) { log.debug("LOAD IPInfo.properties ERROR!"); e.printStackTrace(); } } //测试用的 public static void main(String[] args) { System.out.println(ReadIPInfoFileUtil2.test()); List<String> ipInfosList = ReadIPInfoFileUtil2.readIPInfos(); for (String ipInfo : ipInfosList) { System.out.println(ipInfo); if ("127.0.0.13".indexOf(ipInfo) == 0) { System.out.println(ipInfo + " == OK"); } else { System.out.println("ERROR"); } } } public static String test() { return ipInfoPro.getProperty("IP45"); } public static List<String> readIPInfos() { List<String> ipInfosList = new LinkedList<String>(); for (int i = 0;; i++) { String ipInfo = ipInfoPro.getProperty("IP" + i); if (null == ipInfo || "".trim().equals(ipInfo)) { break; } else { ipInfosList.add(ipInfo); } } return ipInfosList; } }
=============================我是分割线==============================
IP限制的核心代码: IPFilter.java package g.web.filter; import g.cms.util.ReadIPInfoFileUtil2; import java.io.IOException; import java.util.List; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Jane(吴贞贞) * @email myhongkongzhen@gmail.com * @since JDK 1.6 * @alter 2009年5月7号 * @version 1.0 2009年5月7号 */ public class IPFilter implements Filter { private static final Log log = LogFactory.getLog(IPFilter.class); @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub request.setCharacterEncoding("utf8"); response.setContentType("text/html;charset=utf8"); HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; HttpSession session = req.getSession(true); Map<String, Object> usr_map = (Map<String, Object>) session .getAttribute("USR_MAP"); if (usr_map == null) { log.debug("用户对象为空,当前用户还没有登录"); String remortIp = getRemortIP(req); log.debug("REQUEST PATH FIRST : " + remortIp); List<String> ipInfosList = ReadIPInfoFileUtil2.readIPInfos(); // log.debug("IP SIZE : " + ipInfosList.size()); String rightIpInfo = null; for (String ipInfo : ipInfosList) { // if (!ipInfo.trim().equals(remortIp.trim())) { // log.debug("====ERROR IP INFO====="); // } else { // log.debug("---OK IP INFO---"); // rightIpInfo = ipInfo; // } if (remortIp.indexOf(ipInfo) == 0) { log.debug("---OK IP INFO---"); rightIpInfo = ipInfo; log.debug("IP INFO : " + rightIpInfo); } else { log.debug("====ERROR IP INFO====="); } } if (null == rightIpInfo || "".trim().equals(rightIpInfo.trim())) { log.debug("用户请求规定IP之外的页面资源,却没有登录,即将跳转到login.jsp"); req.getRequestDispatcher("login.jsp").forward(req, resp); } else { log.debug("用户请求规定IP之内的页面资源,不受限制,让其放行。。。"); chain.doFilter(req, resp); } } else { log.debug("用户已经登录,让其放行....."); request.setAttribute("userName", usr_map.get("name")); chain.doFilter(request, response);// 执行其他过滤器 } } //用来获得客户端的IP地址的方法 private String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
=============================我是分割线==============================
登录页面login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>网站前台登陆</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="<%=basePath%>styles/form.css"></link> </head> <body> <center> <h1> 您的IP不在规定访问权限IP(段)列表中,请通过登录程序访问资源 </h1> </center> <form action="user!loginUser.do" method="post"> <table align="center" border="1" cellpadding="0" cellspacing="0"> <tr> <td> 用户名 </td> <td> <input type="text" name="user.userid" /> </td> </tr> <tr> <td> 密码 </td> <td> <input type="password" name="user.password" /> </td> </tr> <tr> <td align="right"> <input type="submit" value="登录"> </td> <td align="left"> <input type="reset" value="取消"> </td> </tr> </table> </form> </body> </html>
=============================我是分割线==============================
struts2的action代码 /** * @author Jane(吴贞贞) * @email myhongkongzhen@gmail.com * @since JDK 1.6 * @alter 2009年5月7号 * @version 1.0 2009年5月7号 */ public String loginUser() { log.debug("\n-----------------登錄驗證操作--------------------\n"); Map params = request.getParameterMap(); String userName = request.getParameter("user.userid"); String password = request.getParameter("user.password"); if (StringUtils.isEmpty(userName)) { // request.setAttribute("msg", "用户名不能为空"); log.debug("用户名不能为空"); return "loginUser"; } if (StringUtils.isEmpty(password)) { // request.setAttribute("msg", "密码不能为空"); log.debug("密码不能为空"); return "loginUser"; } UserService service = new UserService(); String sql = "select * from manager where userid=? and password=?"; List<?> result = service.query(sql, userName, password); if (result.size() > 0) { HttpSession session = request.getSession(); Map<String, Object> user_map = (Map<String, Object>) result.get(0); session.setAttribute("USR_MAP", user_map); return "indexUser"; } else { // request.setAttribute("msg", "用户不存在"); log.debug("用户不存在"); return "loginUser"; } }
=============================我是分割线==============================
struts2的配置文件struts.xml <action name="user" class="g.cms.web.action.UserAction"> <result name="target">/admin/user/user_info.jsp</result> <result name="manager" type="freemarker"> /admin/user/user_manager.ftl </result> <result name="index" type="redirect"> /admin/index.jsp </result><!-- 重定向到主页为的就是是浏览器地址栏发生变化 --> <result name="login" type="redirect"> /admin/login.jsp </result> <result name="loginUser" type="redirect">login.jsp</result> <result name="indexUser" type="redirect">index.jsp</result> <result name="groupManager"> /admin/user/user_group_manager.ftl </result> <result name="editGroup"> /admin/user/edit_user_group.jsp </result> </action>
=============================我是分割线==============================
以上是实现IP限制的核心代码,如果有不明白的地方,请联系我qq511134962,msn:myhongkongzhen@gmail.com
评论
2 楼
binlaniua
2009-05-08
x-forwarded-for
------------------
楼主不知道能不能赐教下
这个请求头是什么意思呢
------------------
楼主不知道能不能赐教下
这个请求头是什么意思呢
1 楼
crazycode
2009-05-07
今天有空,对这段代码提点建议:
1、读取IP列表比较低效,你完全可以在static中读取IP到一个集合中,而不是每个请求过来都new一个List
2、使用LinkedList不是很好的选择,使用HashSet会更好一些,List确认是否包含一个记录,用的是遍历,而HashSet是直接在哈序排序后的集合中找到记录的,速度不是一个数量级的,而且Set天然有排除重复记录的功能。
3、properties文件定义的格式也比较怪,序号没有什么意义,如果中间序号断了,会出现问题吧
你可以直接用一个文本文件,一行行读进来就是了。
另外,如果想共享代码,最好排一下版,大家看着舒服一点。
1、读取IP列表比较低效,你完全可以在static中读取IP到一个集合中,而不是每个请求过来都new一个List
2、使用LinkedList不是很好的选择,使用HashSet会更好一些,List确认是否包含一个记录,用的是遍历,而HashSet是直接在哈序排序后的集合中找到记录的,速度不是一个数量级的,而且Set天然有排除重复记录的功能。
3、properties文件定义的格式也比较怪,序号没有什么意义,如果中间序号断了,会出现问题吧

另外,如果想共享代码,最好排一下版,大家看着舒服一点。
发表评论
-
substring与split的效率问题
2014-07-04 16:21 1895/** * demo */ package dem ... -
JAVA內存引用的理解
2012-06-19 10:12 7642012年6月19日10:08:02 源碼: ... -
對JAVA引用的一點理解
2012-05-31 23:14 8022012年5月31日23:06:13 ... -
List、Set等類存儲JavaBean的簡單排序實現
2010-06-12 09:44 1112列表排序常用操作: 1、Model類 implements ... -
TOMCAT配置文件配置字符編碼
2010-01-19 15:23 2660TOMCAT配置文件配置字符編碼 總是忘記這兩個參數, ... -
struts2得到request對象
2009-12-23 11:25 9732009年12月23號 週三 天氣晴 struts2得 ... -
JDBC鏈接access數據庫不同機器配置產生亂碼解決方案
2009-09-28 16:54 11942009年9月28號 天氣小雨 週一 JDBC鏈接 ... -
超鏈接點擊次數的統計方法(超簡單)
2009-08-25 11:24 63562009年8月25號 天氣晴 週二 今天一個靈感, ... -
带有checkbox的TREE列表级联的选择子栏目的JAVA标签形式的实现
2009-05-10 12:32 30042009年5月10号 天气晴 星期日 ... -
类似GOOGLE,BAIDU的WEB应用PAGE分页标签JAVA实现
2009-05-09 13:42 28142009年5月9号 星期六 天气晴 以 ... -
ACCESS数据库资源导入到ORACLE数据库表中的实现
2009-05-08 11:33 16052009年5月8号 天气晴 星期五 以下 ... -
根据 crazycode的建议,修改通过IP控制权限访问网站的部分代码
2009-05-07 18:43 11932009年5月7号 根据crazycode前辈的 ... -
nutch搜索引擎windows版本,包含中文分词技术
2009-05-05 11:40 33412009年5月5日 星 ...
相关推荐
其中,通过配置文件对特定IP地址或IP段进行访问限制是一项常用且有效的手段。 #### 配置示例解析 ##### 示例一:基础IP限制配置 ```nginx server { # 允许指定IP访问 allow 10.57.22.172; # 拒绝所有其他IP访问...
在项目应用中,限制IP访问是一种常见的安全措施,它能够帮助网站管理员控制谁能够访问网站的某些部分或者整个网站。同样,禁止特定IP地址提交表单也是出于安全考虑,防止恶意用户通过表单攻击网站。下面是使用PHP...
这段代码定义了一个`getAddressByIP()`方法,它通过HTTP请求访问腾讯的IP分享计划接口来获取地理位置信息: ```java public String getAddressByIP() { try { String strIP = "0.0.0.0"; // 需要查询的IP地址 ...
总结来说,Nginx作为高性能的HTTP和反向代理服务器,通过精心配置server块的listen指令和server_name指令以及使用rewrite规则,可以实现对IP访问的限制,并指定特定域名的访问规则,包括禁止访问、返回错误信息或...
此外,压缩包中的"iplimit"可能是指这个工具类的具体实现文件,开发者可以通过引入和调用这个文件中的方法来实现IP检查功能。需要注意的是,使用这类工具时,要遵循相关法律法规,尊重用户隐私,并确保数据处理的...
例如,使用RESTful API接口的IP定位服务可以实现快速响应,但可能会受到网络条件和第三方服务的限制。而使用本地数据库虽然可以避免这些问题,但需要定期更新数据以及处理本地存储的大量数据。 需要注意的是,IP...
此外,如果网站需要限制特定IP范围的访问,可以结合`getIP()`函数的返回结果,配合IP地址库进行IP段匹配,从而实现有效的访问控制。例如,可以使用`ip2long()`函数将IP地址转换为整数,再与指定的IP段进行比较。 总...
2. 字符串处理:通过遍历文本,逐字符比较,判断是否满足IP地址的构成条件,如每个段的数值范围在0-255之间,且相邻段间有"."分隔。 3. IP库:某些高级的IP提取器可能还会结合IP数据库,如MaxMind的GeoIP,不仅能...
Java作为广泛使用的编程语言,提供了多种方法实现通过IP地址查询地理位置信息。 首先,我们可以通过访问一些提供IP地址定位服务的公共服务API接口来实现这一功能。例如,淘宝、新浪和腾讯都提供了这样的API。这些...
15. 限制计算机流量:IP-guard可以通过设定时间范围、网络地址、端口范围等条件来限制计算机的流量速度(选项A、B、C)。 16. 其他知识点:IP-guard可以禁止员工从文件服务器拷贝文件到本地(选项17),可以统计...
访问控制允许管理员限制哪些用户可以访问服务器上的资源,以及他们可以进行的操作,从而有效防止未授权的访问,保护敏感信息,确保网站的稳定运行和数据的安全。 在Apache中,实现访问控制主要依赖于一些关键指令,...
AYOU-FLV抓取器能够识别并捕获正在播放的FLV视频流,即使视频源采用了IP过滤或其它限制手段,也能通过特定的技术手段绕过这些障碍,实现视频的下载。 首先,AYOU-FLV抓取器通过监控网络流量,实时检测到视频数据的...
当按上步的方法建立好所有的Web站点后,对于做虚拟主机,可以通过给各Web站点设不同的端口号来实现,比如给一个Web站点设为80,一个设为81,一个设为82……,则对于端口号是80的Web站点,访问格式仍然直接是IP地址就...
- **设备特性**:使用WAP的无线设备通常体积较小、内存有限且DPI性能较低,因此在设计时需要考虑这些限制条件。 - **处理技巧**: - **WML声明**:WML文件的开头必须符合XML格式,例如`...
- **策略实施**:根据公司政策限制内部员工访问外部网站或服务。 - **登录控制**:控制远程登录访问,比如通过Telnet或SSH。 - **文件传输控制**:管理FTP文件上传或下载权限。 #### ACL的分类 - **基本ACL**:主要...
手机连接电脑上网是一种利用手机作为数据传输媒介,让电脑通过手机的网络连接功能实现上网的方法。这种方法尤其适用于没有无线路由器或者在没有固定网络覆盖的环境下,利用手机的移动网络服务来满足上网需求。手机...
4. **代码逆向工程**:如果源代码未提供直接的接口来修改连接限制,可能需要通过逆向工程来分析原始代码的工作原理,找出限制条件,并进行修改。 5. **错误处理和异常处理**:在尝试解除或修改限制时,可能会遇到...
为了提高网站的安全性,开发者常常需要对访问者进行一定的控制,比如限制特定IP地址的访问。本文将详细介绍如何使用ASP编写简单的IP地址过滤代码来保护网页。 #### 二、基本原理与实现方法 ##### 2.1 使用Request...
首先,TCP/IP协议栈作为互联网通信的基础,其在不同网络条件下的表现是分析网络问题的关键。特别是在TCP连接的建立过程中,TCP三次握手是确保通信双方建立起连接的必要步骤。从数据来看,TCP连接的成功率保持在90%...