⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdbmsfilterinvocationdefinitionsource.java

📁 java实现安全系统的开源代码 java实现安全系统的开源代码
💻 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 + -