⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rbacuserdetailservice.java

📁 基于java的组号查询模块
💻 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 + -