// 一个IP,是一个32位无符号的二进制数。故用long的低32表示无符号32位二进制数。
public long getIP(InetAddress ip) {
byte[] b = ip.getAddress();
long l = b[0] << 24L & 0xff000000L | b[1] << 16L & 0xff0000L
| b[2] << 8L & 0xff00 | b[3] << 0L & 0xff;
return l;
}
在struts2相应的action中编写如下判断是否用户是校内用户的方法(方法参数中ip1的IP大小应该大于ip2的IP大小):
public void isSchoolUser(String ip1, String ip2) throws Exception {
// 得到用户的IP地址
String s = ServletActionContext.getRequest().getRemoteAddr();
long l = getIP(InetAddress.getByName(s));
// 设置IP地址段
long l1 = getIP(InetAddress.getByName(ip1));
long l2 = getIP(InetAddress.getByName(ip2));
// 判断用户IP是否处在IP段中
if (l >= l1 && l <= l2) {
ActionContext.getContext().getSession().put("isSchoolUser","yes");
}
}
上面的方法中用到了InetAddress,所以需要引入java.net.InetAddress包;
接着再编写IP拦截器如下:
public class IpAuthorityInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
Map<String, String> session = context.getSession();
if ("yes".equals(session.get("isSchoolUser"))){
return invocation.invoke();
} else {
context.put("AuthorityError", "你是外网用户无法访问此资源");
return "error";
}
}
}
最后当然是配置IP拦截器,让它为你工作吧:
interceptors>
<interceptor name="IpAuthorityInterceptor"
class="web.IpAuthorityInterceptor">
<!--此class对应你项目中的IpAuthorityInterceptor的编写位置-->
</interceptor>
<interceptor-stack name="IpAuthority">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="IpAuthorityInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
此时在你的action中加入相应的配置就可以使用该IP拦截器了。
柴油发电机
发电机
柴油机
柴油发电机
13636374743(上海)
13291526067(嘉兴)