iplockserviceimpl.java

来自「社区文章采用的是平板、树形自由选择的两种展示方式」· Java 代码 · 共 152 行

JAVA
152
字号
/* 
 * Created on 2007-11-12
 * Last modified on 2007-11-12
 * Powered by YeQiangWei.com
 */
package com.yeqiangwei.club.service.security;

import java.util.List;

import com.yeqiangwei.cache.Cache;
import com.yeqiangwei.club.cache.CacheRegion;
import com.yeqiangwei.cache.singleton.CacheFactory;
import com.yeqiangwei.club.dao.DAOLocator;
import com.yeqiangwei.club.dao.DAOWrapper;
import com.yeqiangwei.club.dao.IPLockDAO;
import com.yeqiangwei.club.exception.ClubException;
import com.yeqiangwei.club.exception.DAOException;
import com.yeqiangwei.club.model.IPLock;
import com.yeqiangwei.club.param.IPLockParameter;
import com.yeqiangwei.util.IpUtils;
import com.yeqiangwei.util.Validator;

public class IPLockServiceImpl implements IPLockService{
	
	private static Cache CACHE_IPLOCK = CacheFactory.creator(CacheRegion.IPLOCK);
	
	/**
	 * 缓存最近访问站点的被锁定的IP
	 */
	private static Cache CACHE_IPLOCK_ENTRY = com.yeqiangwei.cache.CacheFactory.creator(CacheRegion.IPLOCKED);
	
	/**
	 * 返回NULL表明这个IP并未经过判断
	 * 返回TRUE表明IP被锁定
	 * 返回FALSE表明正常IP
	 */
	public IPLockEntry getEntry(String ip){
		if(Validator.isEmpty(ip)){
			return null;
		}
		IPLockEntry entry = (IPLockEntry) CACHE_IPLOCK_ENTRY.get(ip);
		if(entry==null){
			entry = new IPLockEntry();
			entry.setIp(ip);
			List<IPLock> list = this.findAll();
			if(!Validator.isEmpty(list)){
				long ip_ = IpUtils.enIpAddr(ip);
				for(IPLock iplock : list){
					if(ip_>=iplock.getStartIp()&&ip_<=iplock.getEndIp()){
						entry.setRedirect(iplock.getRedirect());
						entry.setIsLoked(true);
						entry.setVisited(1);//记录被封锁后的访问次数
						break;
					}
				}
			}
			CACHE_IPLOCK_ENTRY.put(ip, entry);
		}else{
			if(entry.getIsLoked())
				entry.setVisited(entry.getVisited()+1);
		}
		return entry;
	}

	
	public IPLockDAO getIPLockDAO() {
		return DAOWrapper.<IPLockDAO>getSingletonInstance(DAOLocator.IPLOCK);
	}


	@Override
	public long countByParameter(IPLockParameter param) {
		return 0;
	}


	@Override
	public void create(IPLock model) throws ClubException {
		if(model.getEndIp()==2130706432||model.getStartIp()==2130706432){
			throw new ClubException("cannot lock 127.0.0.1");
		}
		try {
			this.getIPLockDAO().create(model);
			CACHE_IPLOCK_ENTRY.clear();
			CACHE_IPLOCK.clear();
		} catch (DAOException e) {
			throw new ClubException(e.toString());
		}
	}


	@Override
	public void createOrUpdate(IPLock model) throws ClubException {
		if(model.getId()>0){
			this.update(model);
		}else{
			this.create(model);
		}
	}


	@Override
	public int delete(IPLock model) throws ClubException {
		try {
			CACHE_IPLOCK_ENTRY.clear();
			CACHE_IPLOCK.clear();
			return this.getIPLockDAO().delete(model);
		} catch (DAOException e) {
			throw new ClubException(e.toString());
		}
	}


	@Override
	public IPLock findById(int id) {
		if(id<=0){
			return null;
		}
		return this.getIPLockDAO().findById(id);
	}


	@Override
	public List<IPLock> findByParameter(IPLockParameter param) {
		return this.getIPLockDAO().findByParameter(param);
	}


	@Override
	public void update(IPLock model) throws ClubException {
		try {
			CACHE_IPLOCK_ENTRY.clear();
			CACHE_IPLOCK.clear();
			this.getIPLockDAO().update(model);
		} catch (DAOException e) {
			throw new ClubException(e.toString());
		}
	}


	@SuppressWarnings("unchecked")
	@Override
	public List<IPLock> findAll() {
		List<IPLock> list = (List<IPLock>) CACHE_IPLOCK.get("IPLock_LIST"); 
		if(Validator.isEmpty(list)){
			list = this.getIPLockDAO().findAll();
			CACHE_IPLOCK.put("IPLock_LIST", list);
		}
		return list;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?