package com.mossle.security.util;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.mossle.security.api.UserInfo;
import com.mossle.security.impl.UserStatusDetailsImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
public class UserDetailsBuilder {
private static Logger logger = LoggerFactory
.getLogger(UserDetailsBuilder.class);
private UserInfo userInfo;
private String password;
public UserDetailsBuilder(UserInfo userInfo, String password) {
this.userInfo = userInfo;
this.password = password;
}
public UserDetails build() {
String username = userInfo.getUsername();
if (username == null) {
throw new IllegalArgumentException("username cannot be null");
}
if (password == null) {
throw new IllegalArgumentException("password cannot be null");
}
String displayName = userInfo.getDisplayName();
if (displayName == null) {
displayName = username;
}
// TODO: 以后要强化这里的账号状态判断
boolean enabled = true;
Collection<GrantedAuthority> authSet = this
.loadUserAuthorities(userInfo.getAuthorities());
List<String> attributes = userInfo.getAttributes();
UserStatusDetailsImpl userStatusDetailsImpl = new UserStatusDetailsImpl(
username, password, enabled, authSet);
userStatusDetailsImpl.setAttributes(attributes);
userStatusDetailsImpl.setId(userInfo.getId());
userStatusDetailsImpl.setDisplayName(displayName);
userStatusDetailsImpl.setScopeId(userInfo.getScopeId());
return userStatusDetailsImpl;
}
protected Collection<GrantedAuthority> loadUserAuthorities(List<String> list) {
if ((list == null) || list.isEmpty()) {
logger.debug("no authorities");
return Collections.EMPTY_LIST;
}
Set<GrantedAuthority> authsSet = new HashSet<GrantedAuthority>();
for (String str : list) {
authsSet.add(new SimpleGrantedAuthority(str));
}
return authsSet;
}
}