From a2110804be17bc21d40915b704b2d0428f373d18 Mon Sep 17 00:00:00 2001 From: "shengzhaoli.shengz" Date: Tue, 17 Oct 2023 10:03:07 +0800 Subject: [PATCH] oauth2.1 flow test --- .../shared/security/SOSUserDetails.java | 91 ++++--------------- .../com/monkeyk/sos/domain/user/User.java | 28 +++++- .../sos/service/impl/UserServiceImpl.java | 2 +- 3 files changed, 42 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/monkeyk/sos/domain/shared/security/SOSUserDetails.java b/src/main/java/com/monkeyk/sos/domain/shared/security/SOSUserDetails.java index 014d364..8eaf148 100644 --- a/src/main/java/com/monkeyk/sos/domain/shared/security/SOSUserDetails.java +++ b/src/main/java/com/monkeyk/sos/domain/shared/security/SOSUserDetails.java @@ -1,99 +1,40 @@ package com.monkeyk.sos.domain.shared.security; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.monkeyk.sos.domain.user.Privilege; import com.monkeyk.sos.domain.user.User; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; import java.io.Serial; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; /** * @author Shengzhao Li */ -public class SOSUserDetails implements UserDetails { +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class") +public class SOSUserDetails extends org.springframework.security.core.userdetails.User { @Serial private static final long serialVersionUID = 3957586021470480642L; - protected static final String ROLE_PREFIX = "ROLE_"; - protected static final GrantedAuthority DEFAULT_USER_ROLE = new SimpleGrantedAuthority(ROLE_PREFIX + Privilege.USER.name()); + public static final String ROLE_PREFIX = "ROLE_"; - protected User user; - - protected List grantedAuthorities = new ArrayList<>(); - - public SOSUserDetails() { - } - - public SOSUserDetails(User user) { - this.user = user; - initialAuthorities(); - } - - private void initialAuthorities() { - //Default, everyone have it - this.grantedAuthorities.add(DEFAULT_USER_ROLE); - - final List privileges = user.privileges(); - for (Privilege privilege : privileges) { - this.grantedAuthorities.add(new SimpleGrantedAuthority(ROLE_PREFIX + privilege.name())); - } - } + public static final GrantedAuthority DEFAULT_USER_ROLE = new SimpleGrantedAuthority(ROLE_PREFIX + Privilege.USER.name()); /** - * Return authorities, more information see {@link #initialAuthorities()} - * - * @return Collection of GrantedAuthority + * @since 3.0.0 */ - @Override - public Collection getAuthorities() { - return this.grantedAuthorities; - } - - @Override - public String getPassword() { - return user.password(); - } - - @Override - public String getUsername() { - return user.username(); - } - - @Override - public boolean isAccountNonExpired() { - return true; - } - - @Override - public boolean isAccountNonLocked() { - return true; - } - - @Override - public boolean isCredentialsNonExpired() { - return true; - } - - @Override - public boolean isEnabled() { - return user.enabled(); - } - - public User user() { - return user; - } + protected String userGuid; - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("{user=").append(user); - sb.append('}'); - return sb.toString(); + public SOSUserDetails(User user) { + super(user.username(), user.password(), user.enabled(), + true, true, true, user.generateAuthorities()); + this.userGuid = user.guid(); } + + public String getUserGuid() { + return userGuid; + } + } \ No newline at end of file diff --git a/src/main/java/com/monkeyk/sos/domain/user/User.java b/src/main/java/com/monkeyk/sos/domain/user/User.java index 5210568..c7435fa 100644 --- a/src/main/java/com/monkeyk/sos/domain/user/User.java +++ b/src/main/java/com/monkeyk/sos/domain/user/User.java @@ -1,12 +1,15 @@ package com.monkeyk.sos.domain.user; import com.monkeyk.sos.domain.AbstractDomain; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.io.Serial; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; + +import static com.monkeyk.sos.domain.shared.security.SOSUserDetails.DEFAULT_USER_ROLE; +import static com.monkeyk.sos.domain.shared.security.SOSUserDetails.ROLE_PREFIX; /** * table: user_ @@ -228,4 +231,23 @@ public class User extends AbstractDomain { return this; } + /** + * 权限值 + * + * @return GrantedAuthority set + * @since 3.0.0 + */ + public Set generateAuthorities() { + Set authorities = new HashSet<>(); + //Default, everyone include + authorities.add(DEFAULT_USER_ROLE); + + final List privileges = this.privileges(); + for (Privilege privilege : privileges) { + authorities.add(new SimpleGrantedAuthority(ROLE_PREFIX + privilege.name())); + } + return authorities; + } + + } \ No newline at end of file diff --git a/src/main/java/com/monkeyk/sos/service/impl/UserServiceImpl.java b/src/main/java/com/monkeyk/sos/service/impl/UserServiceImpl.java index bb5f9f1..a32f468 100644 --- a/src/main/java/com/monkeyk/sos/service/impl/UserServiceImpl.java +++ b/src/main/java/com/monkeyk/sos/service/impl/UserServiceImpl.java @@ -55,7 +55,7 @@ public class UserServiceImpl implements UserService { // return loadOauthUserJsonDto((OAuth2Authentication) authentication); // } else { final SOSUserDetails userDetails = (SOSUserDetails) principal; - return new UserJsonDto(userRepository.findByGuid(userDetails.user().guid())); + return new UserJsonDto(userRepository.findByGuid(userDetails.getUserGuid())); // } }