日期:2014-05-17 浏览次数:20856 次
//------------------------以下Spring Security 3 使用------------------------//
/**
* 自定义方法,这个类放入到Spring容器后,指定init为初始化方法,从数据库中读取资源
*/
@Override
public void init() {
System.out.println("加载资源...");
resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
List<SystemSource> resourceList = systemSourceDao.findAll();
// 通过数据库中的信息设置,systemSource和role
for (SystemSource resource : resourceList) {
//添加到resourceMap,键:资源内容(url),值:角色名(如ROLE_XXXX)
resourceMap.put(resource.getResourceContent(), setToCollection(resource.getRoles()));
System.out.println("加载资源:【"+resource.getResourceContent()+"】");
for (Role role : resource.getRoles()) {
System.out.println("----加载拥有该资源的角色:"+role.getId()+","+role.getRoleName()+","+role.getDescription());
}
}
}
/**
* 自定义方法,将Set<Role>集合转换为框架需要的Collection<ConfigAttribute>集合
*/
@Override
public Collection<ConfigAttribute> setToCollection(Set<Role> roles) {
List<ConfigAttribute> list = new ArrayList<ConfigAttribute>();
//添加角色名(ROLE_XXXX)到列表
for (Role role : roles) {
//SecurityConfig实现了ConfigAttribute接口
list.add(new SecurityConfig(role.getDescription()));
}
return list;
}
/**
* 接口方法
* 获取所有权限配置属性
*/
@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
//实际上是存放所有角色名称(如:ROLE_XXXX)
Set<ConfigAttribute> allAttributes = new HashSet<ConfigAttribute>();
//resourceMap.entrySet()返回Set<Map.Entry<K,V>>,即所有键的集合
for (Map.Entry<String, Collection<ConfigAttribute>> entry : resourceMap.entrySet()) {
allAttributes.addAll(entry.getValue());
}
return allAttributes;
}
/**
* 接口方法
* 用户获取正在访问的资源与所拥有的权限做对比
*/
@Override
public Collection<ConfigAttribute> getAttributes(Object object) {
return null;
}
/**
*接口方法
* 必须返回true
**/
@Override
public boolean supports(Class<?> clazz) {
// TODO Auto-generated method stub
return true;
}