/** * Load a User for ACEGI given its user name * * @param username user name * @throws org.acegisecurity.userdetails.UsernameNotFoundException * @throws org.springframework.dao.DataAccessException * @return the user object description as specified by ACEGI */ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { try { Version db = Version.getDatabaseVersion(); Version code = Version.getApplicationVersion(); if (db.compareTo(code, Version.MINOR) == 0) { log.info("loadUserByUsername - getting user " + username + " using Hibernate"); User user = userDAO.searchByLogin(username); GrantedAuthority[] auths = userRolesService.getAuthorities(user); if (log.isDebugEnabled()) { StringBuilder sb = new StringBuilder(); for (GrantedAuthority auth : auths) { sb.append(auth); sb.append(" "); } log.debug("loadUserByUsername - user roles: " + sb); } final Principal principal = new Principal(user, auths); // setting user preferred Locale final SettingSearch s = new SettingSearch(); s.setName(SettingPath.GENERAL_PREFERRED_LOCALE); s.setOwnerId(user.getId()); final List<Setting> vals = settings.search(s, null); final Setting val = (vals != null && vals.size() > 0) ? vals.get(0) : null; if (val != null) { final Locale local = new Locale(val.getValue()); principal.setLocale(local); } return principal; } else { log.info("loadUserByUsername - getting user " + username + " using JDBC"); return jdbcSearchByLogin(username); } } catch (SecException e) { log.warn("loadUserByUsername - exception", e); throw new DataRetrievalFailureException("Error getting roles for user: "******"loadUserByUsername - exception", e); throw new DataIntegrityViolationException("Inconsistent user name: " + username, e); } catch (DataNotFoundException e) { log.warn("loadUserByUsername - exception", e); throw new UsernameNotFoundException("User not found: " + username, e); } catch (DataAccException e) { log.warn("loadUserByUsername - exception", e); throw new DataRetrievalFailureException("Error getting user: "******"loadUserByUsername - exception", e); throw new DataRetrievalFailureException("Error getting user: " + username, e); } }