Package loxia.security

Source Code of loxia.security.LoxiaUserDetailsService

package loxia.security;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import loxia.dao.UserDao;
import loxia.model.OperatingUnit;
import loxia.model.OperatingUnitType;
import loxia.model.Privilege;
import loxia.model.User;
import loxia.model.UserRole;

import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public class LoxiaUserDetailsService implements UserDetailsService {

  private UserDao userDao; 

  @Transactional(readOnly = true)
  public UserDetails loadUserByUsername(String userName)
      throws UsernameNotFoundException, DataAccessException {
    User user = userDao.findByLoginName(userName);
    if(user == null) throw new UsernameNotFoundException(userName + " is not existed.");
    LoxiaUserDetails result = new LoxiaUserDetails();
    User u = new User();
    OperatingUnit ou = new OperatingUnit();
    OperatingUnitType ouType = new OperatingUnitType();
    try {
      PropertyUtils.copyProperties(user.getOu().getType(), ouType);
      ou.setId(user.getOu().getId());
      ou.setCode(user.getOu().getCode());
      ou.setName(user.getOu().getName());
      ou.setIsAvailable(user.getOu().getIsAvailable());
      u.setId(user.getId());
      u.setLoginName(user.getLoginName());
      u.setUserName(user.getUserName());
      u.setPassword(user.getPassword());
      u.setIsAccNonExpired(user.getIsAccNonExpired());
      u.setIsAccNonLocked(user.getIsAccNonLocked());
      u.setIsPwdNonExpired(user.getIsPwdNonExpired());
      u.setIsAvailable(user.getIsAvailable());
      u.setIsSystem(user.getIsSystem());
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException("Copy bean values error.");
    }
    ou.setType(ouType);
    u.setOu(ou);
    result.setUser(u);
   
    List<LoxiaGrantedAuthority> authorities = new ArrayList<LoxiaGrantedAuthority>();
    Map<String,Set<Long>> map = new HashMap<String, Set<Long>>();
    for(UserRole ur: user.getUserRoles()){
      for(Privilege p : ur.getRole().getPrivileges()){
        Set<Long> ids = map.get(p.getAcl());
        if(ids == null){
          ids = new HashSet<Long>();
          map.put(p.getAcl(), ids);
        }
        ids.add(ur.getOu().getId());
      }
    }
    for(String key: map.keySet())
      authorities.add(new LoxiaGrantedAuthority(key,map.get(key)));
   
    result.setLoxiaAuthorities(authorities);
    return result;
  }
 
  public UserDao getUserDao() {
    return userDao;
  }

  public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
  }

}
TOP

Related Classes of loxia.security.LoxiaUserDetailsService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.