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 + -
显示快捷键?