/*
* Copyright 2004-2005 wangz.
* Project shufe_newsroom
*/
package com.skyon.um.security.acegi.intercept.web;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import com.skyon.framework.util.ResultSetProxy;
import com.skyon.um.security.acegi.IConst;
/**
* @since 2005-8-4
* @author 王政
* @version $Id: JdbcDaoImpl.java,v 1.5 2005/11/01 15:34:04 wangzheng Exp $
*/
public class JdbcDaoImpl extends JdbcDaoSupport implements ResourceMappingProvider {
//~ Static fields/initializers =============================================
public static final String DEF_ALL_RESOURCES_QUERY = " select distinct t.resourceId, t.resourceName, t.parentName, t.action, t.expression from Resource t where t.action is not null and t.layer = '" + IConst.WEB_LAYER + "' order by title";
public static final String DEF_RECIPENTS_RESOURCE_MAPPING_QUERY = " select distinct t.roleName, t.resourceId from Permission t ";
private static final Log logger = LogFactory.getLog(JdbcDaoImpl.class);
//~ Instance fields ========================================================
protected MappingSqlQuery allResources;
protected MappingSqlQuery recipentsResourceMapping;
private String allResourcesQuery;
private String recipentsResourceMappingQuery;
//~ Constructors ===========================================================
public JdbcDaoImpl() {
this.allResourcesQuery = DEF_ALL_RESOURCES_QUERY;
this.recipentsResourceMappingQuery = DEF_RECIPENTS_RESOURCE_MAPPING_QUERY;
}
//~ Methods ================================================================
/**
* @see ResourceMappingProvider#getResourceMappings()
*/
public ResourceMapping[] getResourceMappings() {
List resourceMappings = new LinkedList();
List allResource = getAllResources().execute();
List recipentsResourceMapping = getRecipentsResourceMapping().execute();
Map resourceRecipentsMap = new LinkedHashMap();
for (Iterator iter = recipentsResourceMapping.iterator(); iter.hasNext(); ) {
RecipentsResourceMappingHolder mappingHolder = (RecipentsResourceMappingHolder) iter.next();
List recipents = (List) resourceRecipentsMap.get(mappingHolder.getResourceId());
if (recipents == null) {
recipents = new LinkedList();
}
if (! recipents.contains(mappingHolder.getRecipent())) {
recipents.add(mappingHolder.getRecipent());
}
resourceRecipentsMap.put(mappingHolder.getResourceId(), recipents);
}
for (Iterator iter = allResource.iterator(); iter.hasNext(); ) {
ResourceHolder holder = (ResourceHolder) iter.next();
String resourcePath = holder.getResourcePath();
boolean expression = holder.isExpression();
if (StringUtils.isBlank(resourcePath)) {
continue;
}
// 如果是模糊匹配, 加上 "*" 标志
resourcePath = expression ? resourcePath + "*" : resourcePath;
// 如果 url 前没有 "/", 自动加上
if (resourcePath.indexOf(RESOURCE_PATH_PREFIX) != 0) {
resourcePath = RESOURCE_PATH_PREFIX + resourcePath;
}
ResourceMapping mapping = new ResourceMapping();
mapping.setResourcePath(resourcePath);
String resourceId = holder.getResourceId();
List recipentsByResource = (List) resourceRecipentsMap.get(resourceId);
if (recipentsByResource == null) {
recipentsByResource = new LinkedList();
}
String[] recipents = (String[]) recipentsByResource.toArray(new String[0]);
mapping.setRecipients(recipents);
resourceMappings.add(mapping);
}
if (allResource.isEmpty()) {
return new ResourceMapping[] {new ResourceMapping("/dontuseme", new String[] {"dontuseme"})};
}
return (ResourceMapping[]) resourceMappings.toArray(new ResourceMapping[0]);
}
/**
* @see org.springframework.dao.support.DaoSupport#initDao()
*/
protected void initDao() throws Exception {
if (StringUtils.isBlank(getAllResourcesQuery())) {
logger.info("None custom allResouceQuery find, Using DAFAULT allRecourceQuery sql. ");
}
if (StringUtils.isBlank(getRecipentsResourceMappingQuery())) {
logger.info("None custem recipentsResourceMappingQuery find, Using Default recipentsResourceMappingQuery sql.");
}
initMappingSqlQueries();
}
/**
* Extension point to allow other MappingSqlQuery objects to be substituted
* in a subclass
*/
protected void initMappingSqlQueries() {
setAllResources(new AllResourcesMapping(getDataSource()));
setRecipentsResourceMapping(new RecipentsResourceMapping(getDataSource()));
}
protected final class AllResourcesMapping extends MappingSqlQuery {
public AllResourcesMapping(DataSource dataSource) {
super(dataSource, getAllResourcesQuery());
compile();
}
protected Object mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultSetProxy proxy = new ResultSetProxy(rs);
ResourceHolder holder = new ResourceHolder();
holder.setResourceId(proxy.getString(1));
holder.setResourceName(proxy.getString(2));
holder.setParentName(proxy.getString(3));
holder.setResourcePath(StringUtils.trim(proxy.getString(4)));
holder.setExpression(true);
return holder;
}
}
protected final class RecipentsResourceMapping extends MappingSqlQuery {
public RecipentsResourceMapping(DataSource dataSource) {
super(dataSource, getRecipentsResourceMappingQuery());
compile();
}
protected Object mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultSetProxy proxy = new ResultSetProxy(rs);
String recipent = proxy.getString(1);
String resourceId = proxy.getString(2);
return new RecipentsResourceMappingHolder(recipent, resourceId);
}
}
protected final class RecipentsResourceMappingHolder {
private String recipent;
private String resourceId;
public RecipentsResourceMappingHolder() {
}
/**
* @param recipent
* @param resourceId
*/
public RecipentsResourceMappingHolder(String recipent, String resourceId) {
this.recipent = recipent;
this.resourceId = resourceId;
}
/**
* @return Returns the recipent.
*/
public String getRecipent() {
return recipent;
}
/**
* @param recipent The recipent to set.
*/
public void setRecipent(String recipent) {
this.recipent = recipent;
}
/**
* @return Returns the resourceId.
*/
public String getResourceId() {
return resourceId;
}
/**
* @param resourceId The resourceId to set.
*/
public void setResourceId(Stri
没有合适的资源?快使用搜索试试~ 我知道了~
Acegi_db1.rar_acegi
共36个文件
java:30个
jpg:4个
xml:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 192 浏览量
2022-09-23
07:17:31
上传
评论
收藏 201KB RAR 举报
温馨提示
ACEGI数据库保存 ACEGI数据库保存 ACEGI数据库保存
资源推荐
资源详情
资源评论
收起资源包目录
Acegi_db1.rar (36个子文件)
Acegi 数据库配置安全策略 源代码及图解
um
um
com
skyon
um
security
acegi
strutsmenu
StrutsMenuBuilderImpl.java 6KB
MenuCompentWrapper.java 9KB
MenuItemProvider.java 411B
StrutsMenuBuilder.java 790B
MenuItemDaoProvider.java 6KB
intercept
web
SecurityEnforcementDynamicExtensionFilter.java 5KB
ResourceMapping.java 1KB
FilterInvocationDefinitionSourceCache.java 2KB
FilterInvocationDefinitionSourceDynamicExtentionEditor.java 5KB
EhCacheBasedFilterInvocationDefinitionSourceCache.java 8KB
ResourceMappingProvider.java 482B
JdbcDaoImpl.java 12KB
event
UserChangedEvent.java 596B
AuthoritesChangedEvent.java 723B
UserChangedListener.java 2KB
FilterInvocationDefinitionSourceListener.java 2KB
FilterInvocationDefinitionSourceChangedEvent.java 897B
IConst.java 657B
providers
dao
cache
EhCacheBasedFlushableUserCache.java 726B
FlushableUserCache.java 514B
CurrentUsersAware.java 444B
ui
webapp
AuthenticationProcessingStrutsMenuSupportFilter.java 3KB
cas
CasProcessingStrutsMenuSupportFilter.java 1KB
StrutsMenuSupport.java 2KB
demo
InitSecurityDataListener.java 1KB
InitSecurityDaoJdbc.java 12KB
DemoAction.java 1KB
InitSecurityDao.java 1KB
UserHasnotLoginException.java 744B
webwork
AuthenticationExceptionMessageConvertor.java 2KB
applicationContext-acegi-security.xml 10KB
filterInvocationInterceptor.jpg 38KB
security.jpg 64KB
customEditorConfigurer.jpg 44KB
securityEnforcementFilter.jpg 48KB
www.pudn.com.txt 218B
共 36 条
- 1
资源评论
钱亚锋
- 粉丝: 86
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功