yj10864
BlogJava
::
首页
::
联系
::
聚合
::
管理
8 Posts :: 1 Stories :: 9 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔档案
2010年1月 (1)
2009年12月 (2)
2009年11月 (1)
2009年10月 (2)
2009年9月 (2)
文章档案
2009年10月 (1)
搜索
最新评论
1. re: 23中设计模式-------轻松的比喻语言
不错,让我有了一定的理解。
--lexy
2. re: 23中设计模式-------轻松的比喻语言
顶一下,牛!
--WIN
3. re: 日期类的加减及java中所以日期类的操作算法大全
评论内容较长,点击标题查看
--找个美女做老婆
4. re: 日期类的加减及java中所以日期类的操作算法大全
评论内容较长,点击标题查看
--找个美女做老婆
5. re: 23中设计模式-------轻松的比喻语言
评论内容较长,点击标题查看
--找个美女做老婆
阅读排行榜
1. 日期类的加减及java中所以日期类的操作算法大全(7600)
2. 23中设计模式-------轻松的比喻语言(3209)
3. 解析properties资源文件(632)
4. Spring的字符过滤器的配置(566)
5. tomcat关闭后重启,SESSION 仍然有效的处理方法(338)
评论排行榜
1. 23中设计模式-------轻松的比喻语言(5)
2. 日期类的加减及java中所以日期类的操作算法大全(4)
3. 解析properties资源文件(0)
4. 使用 Java 生成 MD5 编码 (0)
5. tomcat关闭后重启,SESSION 仍然有效的处理方法(0)
struts2实现IP拦截
基本思想:先将的IP地址转换成long型的数,然后比较IP的大小来判断是否处在符合条件的IP地址段。
IP地址转化成long型数的算法
1
2
//
一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。
3
public
long
getIP(InetAddress ip)
{
4
byte
[] b
=
ip.getAddress();
5
long
l
=
b[
0
]
<<
24L
&
0xff000000L
|
b[
1
]
<<
16L
&
0xff0000L
6
|
b[
2
]
<<
8L
&
0xff00
|
b[
3
]
<<
0L
&
0xff
;
7
return
l;
8
}
9
10
//
一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。
11
public
long
getIP(InetAddress ip)
{
12
byte
[] b
=
ip.getAddress();
13
long
l
=
b[
0
]
<<
24L
&
0xff000000L
|
b[
1
]
<<
16L
&
0xff0000L
14
|
b[
2
]
<<
8L
&
0xff00
|
b[
3
]
<<
0L
&
0xff
;
15
return
l;
16
}
在struts2相应的action中编写如下判断是否用户是校内用户的方法(方法参数中ip1的IP大小应该大于ip2的IP大小):
1
public
void
isSchoolUser(String ip1, String ip2)
throws
Exception
{
2
//
得到用户的IP地址
3
String s
=
ServletActionContext.getRequest().getRemoteAddr();
4
long
l
=
getIP(InetAddress.getByName(s));
5
//
设置IP地址段
6
long
l1
=
getIP(InetAddress.getByName(ip1));
7
long
l2
=
getIP(InetAddress.getByName(ip2));
8
//
判断用户IP是否处在IP段中
9
if
(l
>=
l1
&&
l
<=
l2)
{
10
ActionContext.getContext().getSession().put(
"
isSchoolUser
"
,
"
yes
"
);
11
}
12
}
13
14
public
void
isSchoolUser(String ip1, String ip2)
throws
Exception
{
15
//
得到用户的IP地址
16
String s
=
ServletActionContext.getRequest().getRemoteAddr();
17
long
l
=
getIP(InetAddress.getByName(s));
18
//
设置IP地址段
19
long
l1
=
getIP(InetAddress.getByName(ip1));
20
long
l2
=
getIP(InetAddress.getByName(ip2));
21
//
判断用户IP是否处在IP段中
22
if
(l
>=
l1
&&
l
<=
l2)
{
23
ActionContext.getContext().getSession().put(
"
isSchoolUser
"
,
"
yes
"
);
24
}
25
}
上面的方法中用到了InetAddress,所以需要引入java.net.InetAddress包;
接着再编写IP拦截器如下:
1
public
class
IpAuthorityInterceptor
extends
AbstractInterceptor
{
2
public
String intercept(ActionInvocation invocation)
throws
Exception
{
3
ActionContext context
=
invocation.getInvocationContext();
4
Map
<
String, String
>
session
=
context.getSession();
5
if
(
"
yes
"
.equals(session.get(
"
isSchoolUser
"
)))
{
6
return
invocation.invoke();
7
}
else
{
8
context.put(
"
AuthorityError
"
,
"
你是外网用户无法访问此资源
"
);
9
return
"
error
"
;
10
}
11
}
12
}
13
14
public
class
IpAuthorityInterceptor
extends
AbstractInterceptor
{
15
public
String intercept(ActionInvocation invocation)
throws
Exception
{
16
ActionContext context
=
invocation.getInvocationContext();
17
Map
<
String, String
>
session
=
context.getSession();
18
if
(
"
yes
"
.equals(session.get(
"
isSchoolUser
"
)))
{
19
return
invocation.invoke();
20
}
else
{
21
context.put(
"
AuthorityError
"
,
"
你是外网用户无法访问此资源
"
);
22
return
"
error
"
;
23
}
24
}
25
}
1
<
interceptors
>
2
<
interceptor
name
="IpAuthorityInterceptor"
3
class
="web.IpAuthorityInterceptor"
>
4
<!--
此class对应你项目中的IpAuthorityInterceptor的编写位置
-->
5
</
interceptor
>
6
<
interceptor-stack
name
="IpAuthority"
>
7
<
interceptor-ref
name
="defaultStack"
></
interceptor-ref
>
8
<
interceptor-ref
name
="IpAuthorityInterceptor"
></
interceptor-ref
>
9
</
interceptor-stack
>
10
</
interceptors
>
11
12
<
interceptors
>
13
<
interceptor
name
="IpAuthorityInterceptor"
14
class
="web.IpAuthorityInterceptor"
>
15
<!--
此class对应你项目中的IpAuthorityInterceptor的编写位置
-->
16
</
interceptor
>
17
<
interceptor-stack
name
="IpAuthority"
>
18
<
interceptor-ref
name
="defaultStack"
></
interceptor-ref
>
19
<
interceptor-ref
name
="IpAuthorityInterceptor"
></
interceptor-ref
>
20
</
interceptor-stack
>
21
</
interceptors
>
posted on 2009-10-26 10:43
jerry yang
阅读(1579)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Copyright @ jerry yang
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster