// 一个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(嘉兴)