/*
* 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
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
um.rar (35个子文件)
um
applicationContext-acegi-security.xml 10KB
um
com
skyon
um
security
acegi
UserHasnotLoginException.java 744B
strutsmenu
MenuCompentWrapper.java 9KB
MenuItemProvider.java 411B
StrutsMenuBuilderImpl.java 6KB
MenuItemDaoProvider.java 6KB
StrutsMenuBuilder.java 790B
intercept
event
AuthoritesChangedEvent.java 723B
UserChangedEvent.java 596B
FilterInvocationDefinitionSourceChangedEvent.java 897B
FilterInvocationDefinitionSourceListener.java 2KB
UserChangedListener.java 2KB
web
JdbcDaoImpl.java 12KB
EhCacheBasedFilterInvocationDefinitionSourceCache.java 8KB
ResourceMappingProvider.java 482B
FilterInvocationDefinitionSourceCache.java 2KB
ResourceMapping.java 1KB
SecurityEnforcementDynamicExtensionFilter.java 5KB
FilterInvocationDefinitionSourceDynamicExtentionEditor.java 5KB
providers
dao
FlushableUserCache.java 514B
cache
EhCacheBasedFlushableUserCache.java 726B
CurrentUsersAware.java 444B
IConst.java 657B
ui
webapp
AuthenticationProcessingStrutsMenuSupportFilter.java 3KB
StrutsMenuSupport.java 2KB
cas
CasProcessingStrutsMenuSupportFilter.java 1KB
webwork
AuthenticationExceptionMessageConvertor.java 2KB
demo
InitSecurityDao.java 1KB
DemoAction.java 1KB
InitSecurityDataListener.java 1KB
InitSecurityDaoJdbc.java 12KB
security.jpg 64KB
customEditorConfigurer.jpg 44KB
securityEnforcementFilter.jpg 48KB
filterInvocationInterceptor.jpg 38KB
共 35 条
- 1
资源评论
- zhangyin7102012-07-11还不错,有了些了解,适合初学者
- pinocao2011-11-17此文档比较旧了,有待更新。现在Acegi 早更新到 spring security了
- ouwaner2020-03-09不知道还能用不,为了积分
- haofeng1232011-11-11东西不错,但是对于我这样的初学者来说不太适合,不够详细!!
namelijian
- 粉丝: 5
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于opencv的dnn模块实现Yolo-Fastest的目标检测python源码+模型+说明(高分项目).zip
- 使用Python调用微信本地ocr服务.zip
- 【精品推荐】人工智能在医疗中的应用.pptx
- 【精品推荐】电子医疗仪器人机接口-(1).ppt
- 【精品推荐】电子医疗仪器人机接口.ppt
- ubuntu镜像ubuntu镜像01
- 基于paddle搭建神经网络实现5种水果识别分类python源码+数据集(高分毕设).zip
- 【精品推荐】电子商务网店类型介绍.ppt
- 基于paddle搭建神经网络实现水果识别分类python源码+数据集(高分项目).zip
- 三菱plc编程口通信学习笔记.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功