UserServicesImpl.java
Home
/
sm-shop /
src /
main /
java /
com /
salesmanager /
shop /
admin /
security /
UserServicesImpl.java
package com.salesmanager.web.admin.security;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.security.authentication.encoding.PasswordEncoder;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.merchant.model.MerchantStore;
import com.salesmanager.core.business.merchant.service.MerchantStoreService;
import com.salesmanager.core.business.user.model.Group;
import com.salesmanager.core.business.user.model.GroupType;
import com.salesmanager.core.business.user.model.Permission;
import com.salesmanager.core.business.user.service.GroupService;
import com.salesmanager.core.business.user.service.PermissionService;
import com.salesmanager.core.business.user.service.UserService;
import com.salesmanager.web.constants.Constants;
/**
*
* @author casams1
* http://stackoverflow.com/questions/5105776/spring-security-with
* -custom-user-details
*/
@Service("userDetailsService")
public class UserServicesImpl implements WebUserServices{
private static final Logger LOGGER = LoggerFactory.getLogger(UserServicesImpl.class);
@Inject
private UserService userService;
@Inject
private MerchantStoreService merchantStoreService;
@Inject
private PasswordEncoder passwordEncoder;
@Inject
protected PermissionService permissionService;
@Inject
protected GroupService groupService;
@SuppressWarnings("deprecation")
public UserDetails loadUserByUsername(String userName)
throws UsernameNotFoundException, DataAccessException {
com.salesmanager.core.business.user.model.User user = null;
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
try {
user = userService.getByUserName(userName);
if(user==null) {
return null;
}
GrantedAuthority role = new GrantedAuthorityImpl(Constants.PERMISSION_AUTHENTICATED);//required to login
authorities.add(role);
List<Integer> groupsId = new ArrayList<Integer>();
List<Group> groups = user.getGroups();
for(Group group : groups) {
groupsId.add(group.getId());
}
List<Permission> permissions = permissionService.getPermissions(groupsId);
for(Permission permission : permissions) {
GrantedAuthority auth = new GrantedAuthorityImpl(permission.getPermissionName());
authorities.add(auth);
}
} catch (Exception e) {
LOGGER.error("Exception while querrying user",e);
throw new SecurityDataAccessException("Exception while querrying user",e);
}
User secUser = new User(userName, user.getAdminPassword(), user.isActive(), true,
true, true, authorities);
return secUser;
}
public void createDefaultAdmin() throws Exception {
//TODO create all groups and permissions
MerchantStore store = merchantStoreService.getMerchantStore(MerchantStore.DEFAULT_STORE);
String password = passwordEncoder.encodePassword("password", null);
List<Group> groups = groupService.listGroup(GroupType.ADMIN);
//creation of the super admin admin:password)
com.salesmanager.core.business.user.model.User user = new com.salesmanager.core.business.user.model.User("admin",password,"admin@shopizer.com");
user.setFirstName("Administrator");
user.setLastName("User");
for(Group group : groups) {
if(group.getGroupName().equals(Constants.GROUP_SUPERADMIN) || group.getGroupName().equals(Constants.GROUP_ADMIN)) {
user.getGroups().add(group);
}
}
user.setMerchantStore(store);
userService.create(user);
}
}