rolemanager.java
来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 130 行
JAVA
130 行
package anni.asecurity.manager;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import anni.asecurity.domain.Resource;
import anni.asecurity.domain.Role;
import anni.core.dao.hibernate.HibernateEntityDao;
import anni.core.security.AuthenticationHelper;
import anni.core.security.cache.AcegiCacheManager;
import anni.core.security.resource.ResourceDetails;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Lingo.
* @since 2007年08月18日 下午 20时19分00秒578
*/
public class RoleManager extends HibernateEntityDao<Role> {
/** * logger. */
private static Log logger = LogFactory.getLog(RoleManager.class);
/**
* AcegiCacheManager.
*/
private AcegiCacheManager acegiCacheManager = null;
/**
* @param acegiCacheManagerIn acegiCacheManager.
*/
public void setAcegiCacheManager(AcegiCacheManager acegiCacheManagerIn) {
acegiCacheManager = acegiCacheManagerIn;
}
/**
* @param o role.
*/
@Override
public void save(Object o) {
super.save(o);
flush();
Role role = (Role) o;
Set<Resource> resources = role.getResources();
for (Resource resource : resources) {
saveRoleInCache(resource);
}
}
/**
* @param o role.
*/
@Override
public void remove(Object o) {
super.remove(o);
Role role = (Role) o;
removeAuthoritiesInCache(role.getName());
}
/**
* 将资源保存到缓存里.
*
* @param resc 资源
*/
public void saveRoleInCache(Resource resc) {
GrantedAuthority[] authorities = AuthenticationHelper
.convertToGrantedAuthority(resc.getRoles(), "name");
logger.info(java.util.Arrays.asList(resc.getResString()));
logger.info(java.util.Arrays.asList(authorities));
ResourceDetails rd = acegiCacheManager.getResourceFromCache(resc
.getResString());
rd.setAuthorities(authorities);
}
/**
* 删除缓存中的授权.
*
* @param authority 授权
*/
private void removeAuthoritiesInCache(String authority) {
GrantedAuthorityImpl auth = new GrantedAuthorityImpl(authority);
List<String> rescs = acegiCacheManager.getAllResources();
for (Iterator iter = rescs.iterator(); iter.hasNext();) {
String str = (String) iter.next();
ResourceDetails resc = acegiCacheManager.getResourceFromCache(str);
GrantedAuthority[] auths = resc.getAuthorities();
int idx = ArrayUtils.indexOf(auths, auth);
if (idx >= 0) {
auths = (GrantedAuthority[]) ArrayUtils.remove(auths, idx);
resc.setAuthorities(auths);
}
}
List<String> users = acegiCacheManager.getAllUsers();
for (Iterator iter = users.iterator(); iter.hasNext();) {
String username = (String) iter.next();
UserDetails user = acegiCacheManager.getUser(username);
GrantedAuthority[] auths = user.getAuthorities();
int idx = ArrayUtils.indexOf(auths, auth);
if (idx >= 0) {
auths = (GrantedAuthority[]) ArrayUtils.remove(auths, idx);
user = new org.acegisecurity.userdetails.User(user
.getUsername(), user.getPassword(),
user.isEnabled(), true, true, true, auths);
acegiCacheManager.addUser(user);
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?