📄 rdbmsfilterinvocationdefinitionsource.java
字号:
package com.starit.acegi;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.ehcache.Cache;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import org.acegisecurity.ConfigAttributeDefinition;
import org.acegisecurity.SecurityConfig;
import org.acegisecurity.intercept.web.AbstractFilterInvocationDefinitionSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.Assert;
import org.springframework.util.PathMatcher;
import com.starit.DAO.BaseDao;
import com.starit.model.Role;
import com.starit.model.Weburl;
import com.starit.model.WeburlRole;
public class RdbmsFilterInvocationDefinitionSource extends AbstractFilterInvocationDefinitionSource
implements InitializingBean {
protected static final Log logger = LogFactory.getLog(RdbmsFilterInvocationDefinitionSource.class);
public BaseDao baseDao;
private Cache webresdbCache;
private PathMatcher pathMatcher = new AntPathMatcher();
public void afterPropertiesSet() throws Exception {
Assert.notNull(baseDao,"baseDao : 不能为空");
}
@Override
public ConfigAttributeDefinition lookupAttributes(String url) {
Map map = this.getConfigAttributeDefinitionMap();
if (map == null || map.size() == 0)
return null;
int firstQuestionMarkIndex = url.indexOf("?");
if (firstQuestionMarkIndex != -1) {
url = url.substring(0, firstQuestionMarkIndex);
}
Iterator iterator = map.keySet().iterator();
String key = null;
while(iterator.hasNext())
{
key = (String)iterator.next();
boolean matched = pathMatcher.match(key, url);
if (logger.isDebugEnabled()) {
logger.debug("匹配到如下URL: '" + url + ";模式为 " + key + ";是否被匹配:" + matched);
}
if (matched) {
return (ConfigAttributeDefinition)map.get(url);
}
}
return null;
}
public Iterator getConfigAttributeDefinitions() {
Set set = new HashSet();
Map map = getConfigAttributeDefinitionMap();
Iterator iterator = map.keySet().iterator();
String url = null;
while(iterator.hasNext())
{
url = (String)iterator.next();
set.add(map.get(url));
}
return set.iterator();
}
//可以缓存这个方法。减少访问数据库
private Map getConfigAttributeDefinitionMap()
{
Element element = this.webresdbCache.get("webres");
Map map = new HashMap<String,ConfigAttributeDefinition>();
List weburlList = baseDao.findAll(Weburl.class);
Role role = null;
WeburlRole weburlRole =null;
String url = null;
if(element != null){
return (Map)element.getValue();
}
for(int i = 0; i < weburlList.size(); ++i)
{
url = ((Weburl)weburlList.get(i)).getUrl();
ConfigAttributeDefinition cad = new ConfigAttributeDefinition();
Set weburl = ((Weburl)weburlList.get(i)).getWeburlRole();
Iterator roleSet = weburl.iterator();
while(roleSet.hasNext())
{
weburlRole = (WeburlRole)roleSet.next();
role = weburlRole.getRole();
cad.addConfigAttribute(new SecurityConfig(role.getRoleName()));
}
map.put(url, cad);
}
Element elem = new Element("webres", map);
this.webresdbCache.put(elem);
return map;
}
public void setBaseDao(BaseDao baseDao) {
this.baseDao = baseDao;
}
public void setWebresdbCache(Cache webresdbCache) {
this.webresdbCache = webresdbCache;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -