说明
很多的Web系统都经常有这样的需求以保证系统安全,限制IP登录,例如在某个局域网中只允许一定范围内IP登录系统,或者不允许外网访问,
Java 手动配置某一范围内IP访问
。如只允许192.168.24.10---192.168.24.255范围内IP地址访问
IP地址分类
在说到关于IP地址的问题时,首先,要了解IP分类,IP一般分为A、B、C、D、E五类,我们常说的192.168.*.*,是属于C类,该类主要适用于小型网络,比如我们学校的局域网。
IP地址范围从192.168.0.0到192.168.255.255,不包括这两个地址,他们属于保留地址。
限制示例
这个实例写在了Struts的Action方法里面,当然也可以拿出来,写在Filter里,这样可以通过简单配置就可以实现禁止客户端访问。
LoginAction
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.bjpowernode.drp.web.actions;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.bjpowernode.drp.web.forms.LoginActionForm;
/**
* 登录Action
* 负责取得表单数据、调用业务逻辑、返回转向信息
*
* @author Administrator
*
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm. form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//取得表单数据
LoginActionForm. laf=(LoginActionForm)form;
//取得用户名,密码
String username=laf.getUsername();
String password=laf.getPassword();
//转向对象
ActionForward actionForward=null;
//判断用户名,密码是否正确
if ("admin".equals(username) && "admin".equals(password)) {
//得到远程客户端IP地址
String remoteAddr=request.getRemoteAddr();
//将客户端IP地址以“.”分割为数组remoteAddrs[1]);
String[] remoteAddrs=remoteAddr.split("\\.");
//从配置文件中取得IP范围 ,四个数组分别保存的IP地址四部分的上界和下界
String[] ipOne=request.getSession().getServletContext().getInitParameter("ip-one").split(",");
String[] ipTwo=request.getSession().getServletContext().getInitParameter("ip-two").split(",");
String[] ipThree=request.getSession().getServletContext().getInitParameter("ip-three").split(",");
String[] ipFour=request.getSession().getServletContext().getInitParameter("ip-four").split(",");
//取得第四部分的上下界
int m=Integer.parseInt(ipFour[0]);
int n=Integer.parseInt(ipFour[1]);
//判断客户端IP地址是否在设置范围内
if (ipOne[0].equals(remoteAddrs[0]) && ipTwo[0].equals(remoteAddrs[1]) && ipThree[0].equals(remoteAddrs[2])) {
for(int i=m;i<=n;i++) {
if (Integer.parseInt(remoteAddrs[3])==i) {
//登录成功
request.getSession().setAttribute("user", username);
actionForward= mapping.findForward("success");
}
}
actionForward= mapping.findForward("ipError");
}
}else {
//登录失败
actionForward= mapping.findForward("index");
}
return actionForward;
}
}
package com.bjpowernode.drp.web.actions;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.bjpowernode.drp.web.forms.LoginActionForm;
/**
* 登录Action
* 负责取得表单数据、调用业务逻辑、返回转向信息
*
* @author Administrator
*
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm. form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//取得表单数据
LoginActionForm. laf=(LoginActionForm)form;
//取得用户名,密码
String username=laf.getUsername();
String password=laf.getPassword();
//转向对象
ActionForward actionForward=null;
//判断用户名,密码是否正确
if ("admin".equals(username) && "admin".equals(password)) {
//得到远程客户端IP地址
String remoteAddr=request.getRemoteAddr();
//将客户端IP地址以“.”分割为数组remoteAddrs[1]);
String[] remoteAddrs=remoteAddr.split("\\.");
//从配置文件中取得IP范围 ,四个数组分别保存的IP地址四部分的上界和下界
String[] ipOne=request.getSession().getServletContext().getInitParameter("ip-one").split(",");
String[] ipTwo=request.getSession().getServletContext().getInitParameter("ip-two").split(",");
String[] ipThree=request.getSession().getServletContext().getInitParameter("ip-three").split(",");
String[] ipFour=request.getSession().getServletContext().getInitParameter("ip-four").split(",");
//取得第四部分的上下界
int m=Integer.parseInt(ipFour[0]);
int n=Integer.parseInt(ipFour[1]);
//判断客户端IP地址是否在设置范围内
if (ipOne[0].equals(remoteAddrs[0]) && ipTwo[0].equals(remoteAddrs[1]) && ipThree[0].equals(remoteAddrs[2])) {
for(int i=m;i<=n;i++) {
if (Integer.parseInt(remoteAddrs[3])==i) {
//登录成功
request.getSession().setAttribute("user", username);
actionForward= mapping.findForward("success");
}
}
actionForward= mapping.findForward("ipError");
}
}else {
//登录失败
actionForward= mapping.findForward("index");
}
return actionForward;
}
}