spring security 过滤器的写法

gplxbxc 2011-04-06 02:38:04
/** 自定义的过滤器 */
public class JdbcFilterInvocationDefinitionSourceFactoryBean
extends JdbcDaoSupport implements FactoryBean {
private String resourceQuery;

boolean isSingleton() {
return true;
}

public Class getObjectType() {
return FilterInvocationDefinitionSource.class;
}

/** 使用urlMatcher和requestMap创建DefaultFilterInvocationDefinitionSource */
public Object getObject() {
return new DefaultFilterInvocationDefinitionSource(this
.getUrlMatcher(), this.buildRequestMap());
}

/** 获得所有资源信息 */
protected Map<String, String> findResources() {
ResourceMapping resourceMapping = new ResourceMapping(getDataSource(),
resourceQuery);

Map<String, String> resourceMap = new LinkedHashMap<String, String>();

for (Resource resource : (List<Resource>) resourceMapping.execute()) {
String url = resource.getUrl();
String role = resource.getRole();

if (resourceMap.containsKey(url)) {
String value = resourceMap.get(url);
resourceMap.put(url, value + "," + role);
} else {
resourceMap.put(url, role);
}
}

return resourceMap;
}

/** 使用获得的资源信息组装requestMap */
protected LinkedHashMap<RequestKey, ConfigAttributeDefinition> buildRequestMap() {
LinkedHashMap<RequestKey, ConfigAttributeDefinition> requestMap = null;
requestMap = new LinkedHashMap<RequestKey, ConfigAttributeDefinition>();

ConfigAttributeEditor editor = new ConfigAttributeEditor();

Map<String, String> resourceMap = this.findResources();

for (Map.Entry<String, String> entry : resourceMap.entrySet()) {
RequestKey key = new RequestKey(entry.getKey(), null);
editor.setAsText(entry.getValue());
requestMap.put(key,
(ConfigAttributeDefinition) editor.getValue());
}

return requestMap;
}

protected UrlMatcher getUrlMatcher() {
return new AntUrlPathMatcher();
}

public void setResourceQuery(String resourceQuery) {
this.resourceQuery = resourceQuery;
}

private class Resource {

/** 访问地址 */
private String url;

/** 角色 */
private String role;

/** 菜单 */
private String menu;

/** 路径 */
private String path;

public Resource(String url, String role ,String menu, String path) {
this.url = url;
this.role = role;
this.menu = menu;
this.path = path;
}

public String getUrl() {
return url;
}

public String getRole() {
return role;
}

public String getMenu(){
return menu;
}

public String getPath(){
return path;
}
}

/** 搜索数据库获得资源信息,实现数据库操作 */
private class ResourceMapping extends MappingSqlQuery {

protected ResourceMapping(DataSource dataSource,
String resourceQuery) {
super(dataSource, resourceQuery);
compile();
}

protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
String role = rs.getString(2);
String url = rs.getString(1);
String menu = rs.getString(3);
String path = rs.getString(4);
Resource resource = new Resource(url, role, menu, path);
return resource;
}
}
}

开始Resource只有url和role。我想做成现在拥有url, role, menu, path四个参数的过滤器,怎么修改啊?
或者大家有什么好的方法,在获取资源表的url时,把剩下的menu,path读取出来也可以?
我的目的就是读取资源表里的所有信息。
...全文
254 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gplxbxc 2011-04-07
  • 打赏
  • 举报
回复
我写的问题,大家不清楚,还是……
gplxbxc 2011-04-06
  • 打赏
  • 举报
回复
是啊,对资源的控制不太清楚。比如怎么控制menu
longintstring 2011-04-06
  • 打赏
  • 举报
回复
你再做权限的问题么?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧