From b637fb08ec1e7004ce5cb2b06a9684088206b3e0 Mon Sep 17 00:00:00 2001 From: lishengzhao Date: Wed, 20 May 2015 15:35:54 +0800 Subject: [PATCH] Upgrade load user json dto if it is OAuth2Authentication --- .../java/cc/wdcy/domain/dto/UserJsonDto.java | 12 +++++--- .../cc/wdcy/service/impl/UserServiceImpl.java | 28 +++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/wdcy/domain/dto/UserJsonDto.java b/src/main/java/cc/wdcy/domain/dto/UserJsonDto.java index f6583f5..ebfbeb2 100644 --- a/src/main/java/cc/wdcy/domain/dto/UserJsonDto.java +++ b/src/main/java/cc/wdcy/domain/dto/UserJsonDto.java @@ -20,7 +20,7 @@ public class UserJsonDto implements Serializable { private String phone; private String email; - private List privileges = new ArrayList<>(); + private List privileges = new ArrayList<>(); public UserJsonDto() { } @@ -32,7 +32,11 @@ public class UserJsonDto implements Serializable { this.phone = user.phone(); this.email = user.email(); - this.privileges = user.privileges(); + + final List privilegeList = user.privileges(); + for (Privilege privilege : privilegeList) { + this.privileges.add(privilege.name()); + } } public boolean isArchived() { @@ -75,11 +79,11 @@ public class UserJsonDto implements Serializable { this.email = email; } - public List getPrivileges() { + public List getPrivileges() { return privileges; } - public void setPrivileges(List privileges) { + public void setPrivileges(List privileges) { this.privileges = privileges; } } \ No newline at end of file diff --git a/src/main/java/cc/wdcy/service/impl/UserServiceImpl.java b/src/main/java/cc/wdcy/service/impl/UserServiceImpl.java index bb68faa..f03abe7 100644 --- a/src/main/java/cc/wdcy/service/impl/UserServiceImpl.java +++ b/src/main/java/cc/wdcy/service/impl/UserServiceImpl.java @@ -6,11 +6,16 @@ import cc.wdcy.domain.user.User; import cc.wdcy.domain.user.UserRepository; import cc.wdcy.service.UserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.stereotype.Service; +import java.util.Collection; + /** * @author Shengzhao Li */ @@ -32,7 +37,26 @@ public class UserServiceImpl implements UserService { @Override public UserJsonDto loadCurrentUserJsonDto() { - final WdcyUserDetails userDetails = (WdcyUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return new UserJsonDto(userRepository.findByGuid(userDetails.user().guid())); + final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication instanceof OAuth2Authentication && authentication.getPrincipal() instanceof String) { + return loadOauthUserJsonDto((OAuth2Authentication) authentication); + } else { + final WdcyUserDetails userDetails = (WdcyUserDetails) authentication.getPrincipal(); + return new UserJsonDto(userRepository.findByGuid(userDetails.user().guid())); + } + } + + + private UserJsonDto loadOauthUserJsonDto(OAuth2Authentication oAuth2Authentication) { + UserJsonDto userJsonDto = new UserJsonDto(); + userJsonDto.setUsername(oAuth2Authentication.getName()); + + final Collection authorities = oAuth2Authentication.getAuthorities(); + for (GrantedAuthority authority : authorities) { + userJsonDto.getPrivileges().add(authority.getAuthority()); + } + + return userJsonDto; } } \ No newline at end of file