/*
* (c) Copyright 2005-2012 JAXIO, www.jaxio.com
* Source code generated by Celerio, a Jaxio product
* Want to use Celerio within your company? email us at info@jaxio.com
* Follow us on twitter: @springfuse
* Template pack-backend-sd:src/main/java/project/security/UserDetailsServiceImpl.p.vm.java
*/
package com.company.demo.security;
import static com.google.common.collect.Lists.newArrayList;
import static org.apache.commons.lang.StringUtils.isBlank;
import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.company.demo.domain.Account;
import com.company.demo.repository.AccountRepository;
/**
* An implementation of Spring Security's UserDetailsService.
*/
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
private static final Logger log = Logger.getLogger(UserDetailsServiceImpl.class);
private AccountRepository accountRepository;
@Autowired
public UserDetailsServiceImpl(AccountRepository accountRepository) {
this.accountRepository = accountRepository;
}
@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
Account user = getUser(username);
String password = user.getPassword();
Collection<GrantedAuthority> grantedAuthorities = toGrantedAuthorities(user.getRoleNames());
boolean enabled = user.getIsEnabled();
boolean userNonExpired = true;
boolean credentialsNonExpired = true;
boolean userNonLocked = true;
return new org.springframework.security.core.userdetails.User( //
username, password, //
enabled, userNonExpired, //
credentialsNonExpired, userNonLocked, //
grantedAuthorities);
}
private Account getUser(String username) {
if (log.isDebugEnabled()) {
log.debug("Security verification for user '" + username + "'");
}
if (isBlank(username)) {
throw new UsernameNotFoundException("Empty username");
}
Account user = accountRepository.getByUsername(username);
if (user == null) {
if (log.isInfoEnabled()) {
log.info("User " + username + " could not be found");
}
throw new UsernameNotFoundException("user " + username + " could not be found");
}
return user;
}
private Collection<GrantedAuthority> toGrantedAuthorities(List<String> roles) {
List<GrantedAuthority> result = newArrayList();
for (String role : roles) {
result.add(new GrantedAuthorityImpl(role));
}
return result;
}
}