package com.walker.security; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.util.List; import java.util.concurrent.TimeUnit; public class SystemLogMan { // private final transient Logger logger = LoggerFactory.getLogger(getClass()); private static final SpiderLoader loader = new DefaultSpiderLoader(); private static final Man man = new Man(); private static final SystemLogMan slm = new SystemLogMan(); private static final String LOCALHOST_1 = "127.0.0.1"; private static final String LOCALHOST_2 = "localhost"; private SystemLogMan(){} public static final SystemLogMan getInstance(){ return slm; } public final void checkMan(String host){ // 如果是开发环境,本地测试,不再检查注册 if(host != null && (host.indexOf(LOCALHOST_1) >= 0 || host.indexOf(LOCALHOST_2) >= 0)){ return; } doManCheck(); } /** * 真正判断授权的方法 */ public final void checkMan(){ doCheckMan2(); } private final void doCheckMan2(){ man.checkMan(); } private final void doManCheck(){ if(man.manStatus){ // do nothing... } Object[] result = (Object[])loader.load(); if(result == null || result.length != 2){ man.manStatus = false; man.getEating(); } // 从用户配置文件中返回协议结果 int status = (Integer)result[0]; if(status == 1){ man.setMan((byte[])result[1]); if(!man.manStatus){ man.getEating(); } } else { System.out.println("-------- load sysLogMan failed!"); man.getEating(); } } private static class Man{ private boolean manStatus = false; private LocalSpider spider = new DefaultLocalSpider(); /** * 设置协议内容。

* Mac地址\r\n公匙 * @param content */ public void setMan(byte[] content){ doCheckMan(content); } private void doCheckMan(byte[] content){ if(content == null || content.length <= 0){ return; } int size = content.length; // System.out.println("读取的文件长度 = " + size); // 消息内容 ByteBuffer messageBuffer = ByteBuffer.allocate(1024); ByteBuffer buffer = ByteBuffer.wrap(content); byte temp; for(int i=0; i my walker ea logging..."); } catch (InterruptedException e) { e.printStackTrace(); } } private void display(String msg, byte[] bytes){ // System.out.println(msg + "长度: " + bytes.length); // System.out.println(msg + "内容: " + new String(bytes)); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 第二次修改的方法,只有下面的方法是真正的方法。 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private int type = 0; private String address; private long st = 0; private long et = 0; public void setMan(String[] array){ doSetMan(array); } private void doSetMan(String[] array){ if(array == null || array.length != 4){ throw new IllegalArgumentException(); } type = Integer.parseInt(array[0].toString()); address = array[1]; st = Long.parseLong(array[2]); et = Long.parseLong(array[3]); manStatus = true; } public void checkMan(){ doCheckLisence(); } private void doCheckLisence(){ if(manStatus){ // 已经加载过协议就直接读取,判断 } else { // 还没有加载 Object[] result = (Object[])loader.load(); // for (Object o : result){ // System.out.println(o.toString()); // } if(result == null || result.length != 2) throw new SecurityRuntimeException(); if(!result[0].toString().equals("1")){ throw new SecurityRuntimeException(); } this.setMan((String[])result[1]); } if(type == 0){ // 仅通过ip授权 doValidateAddress(); } else if(type == 1){ // 仅通过时间段授权 doValidateDate(); } else if(type == 2){ // 两种同时使用 doValidateAddress(); doValidateDate(); } else { throw new SecurityRuntimeException("unknown authen type: " + type, null); } } private boolean doValidateAddress(){ List addresses = spider.getMyIdentifiers(); // System.out.println("........... addresses: " + addresses); if(addresses != null && addresses.contains(address)){ // ok return true; } else { throw new SecurityRuntimeException("address error:", null); } } private boolean doValidateDate(){ long _cuTime = System.currentTimeMillis(); if(_cuTime > st && _cuTime < et){ return true; } else { throw new SecurityRuntimeException("date expired:", null); } } } // public static void main(String[] args){ // SystemLogMan.getInstance().checkMan(); // } }