📄 rbacuserdetailservice.java
字号:
/*
* package com.lily.dap.webapp.acegi;
* class UserDetailservice
*
* 创建日期 2006-2-28
*
* 开发者 zouxuemo
*
* 淄博百合电子有限公司版权所有
*/
package com.lily.dap.webapp.acegi;
import java.util.Iterator;
import java.util.Set;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
import com.lily.dap.model.organize.Person;
import com.lily.dap.model.right.Permission;
import com.lily.dap.model.right.Role;
import com.lily.dap.model.right.User;
import com.lily.dap.service.core.exception.DataNotExistException;
import com.lily.dap.service.organize.PersonManager;
import com.lily.dap.service.right.RoleManager;
import com.lily.dap.service.right.UserManager;
/**
* 基于RBAC机制,给用户认证使用的用户登陆信息获取服务类
*
* @author zouxuemo
*
*/
public class RbacUserDetailService implements UserDetailsService {
public static final String BASE_ROLE = "guest";
// public static final String BASE_PERMISSION_RIGHT_OBJECT = "system";
//
// public static final String BASE_PERMISSION_RIGHT_OPERATION = "operation";
private UserManager userManager;
private RoleManager roleManager;
private PersonManager personManager;
/**
* @param userManager 要设置的 userManager。
*/
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
/**
* @param roleManager 要设置的 roleManager。
*/
public void setRoleManager(RoleManager roleManager) {
this.roleManager = roleManager;
}
/**
* @param personManager 要设置的 personManager。
*/
public void setPersonManager(PersonManager personManager) {
this.personManager = personManager;
}
/* (非 Javadoc)
* @see org.acegisecurity.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
*/
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
//TODO 当系统需要加密时,解开如下代码,并将dogjava.dll拷贝到web-inf/classes下面
// try{
// JavaDOG dog = new JavaDOG();
// if(!dog.isCheckOk())
// throw new InsufficientAuthenticationException("此系统未经授权,请使用正版软件!");
// }catch(Exception e){
// throw new InsufficientAuthenticationException("此系统未经授权,请使用正版软件!");
// }
User userDetails = null;
try {
userDetails = userManager.getUser(username);
} catch (DataNotExistException e) {
throw new UsernameNotFoundException("用户 '" + username + "' 未找到...");
}
// 检索用户关联人员的私有角色,获取角色拥有的所有角色列表和所有许可列表,与缓存对象关联。设置到userDetails中
Person person;
try {
person = personManager.getPerson(userDetails.getUsername());
} catch (DataNotExistException e) {
throw new UsernameNotFoundException("给定名称的用户未找到!");
}
userDetails.setObject(person);
long role_id = person.getPrivateRoleID();
retrieveRoleAndInsertToUser(userDetails, role_id);
retrievePermissionAndInsertToUser(userDetails, role_id);
return userDetails;
}
protected void retrieveRoleAndInsertToUser(User userDetails, long role_id) {
//在用户明细中增加一个基本角色,这个角色主要用于在一些不需要权限控制的页面,赋予基本角色。
Role role = new Role();
role.setName(BASE_ROLE);
userDetails.addRole(role);
Set roleSet = roleManager.getHaveAllRoles(role_id, true);
Iterator it = roleSet.iterator();
while (it.hasNext())
userDetails.addRole((Role)it.next());
}
protected void retrievePermissionAndInsertToUser(User userDetails, long role_id) {
// //在用户明细中增加一个基本许可,这个许可主要用于在一些不需要权限控制的页面,赋予基本许可。
// Permission permission = new Permission();
// permission.setRi_ob(BASE_PERMISSION_RIGHT_OBJECT);
// permission.setRi_ops(BASE_PERMISSION_RIGHT_OPERATION);
// userDetails.addPermission(permission);
Set permissionSet = roleManager.getHaveAllPermissions(role_id);
Iterator it = permissionSet.iterator();
while (it.hasNext())
userDetails.addPermission((Permission)it.next());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -