spring security 过滤器的写法
/** 自定义的过滤器 */
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读取出来也可以?
我的目的就是读取资源表里的所有信息。