oauth2.1 flow test

pull/4/head
shengzhaoli.shengz 2023-10-17 10:03:07 +08:00
parent 1f77e80ecb
commit a2110804be
3 changed files with 42 additions and 79 deletions

View File

@ -1,99 +1,40 @@
package com.monkeyk.sos.domain.shared.security; 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.Privilege;
import com.monkeyk.sos.domain.user.User; import com.monkeyk.sos.domain.user.User;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.io.Serial; import java.io.Serial;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/** /**
* @author Shengzhao Li * @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 @Serial
private static final long serialVersionUID = 3957586021470480642L; private static final long serialVersionUID = 3957586021470480642L;
protected static final String ROLE_PREFIX = "ROLE_"; public static final String ROLE_PREFIX = "ROLE_";
protected static final GrantedAuthority DEFAULT_USER_ROLE = new SimpleGrantedAuthority(ROLE_PREFIX + Privilege.USER.name());
protected User user; public static final GrantedAuthority DEFAULT_USER_ROLE = new SimpleGrantedAuthority(ROLE_PREFIX + Privilege.USER.name());
protected List<GrantedAuthority> 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<Privilege> privileges = user.privileges();
for (Privilege privilege : privileges) {
this.grantedAuthorities.add(new SimpleGrantedAuthority(ROLE_PREFIX + privilege.name()));
}
}
/** /**
* Return authorities, more information see {@link #initialAuthorities()} * @since 3.0.0
*
* @return Collection of GrantedAuthority
*/ */
@Override protected String userGuid;
public Collection<GrantedAuthority> 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;
}
@Override public SOSUserDetails(User user) {
public String toString() { super(user.username(), user.password(), user.enabled(),
final StringBuilder sb = new StringBuilder(); true, true, true, user.generateAuthorities());
sb.append("{user=").append(user); this.userGuid = user.guid();
sb.append('}');
return sb.toString();
} }
public String getUserGuid() {
return userGuid;
}
} }

View File

@ -1,12 +1,15 @@
package com.monkeyk.sos.domain.user; package com.monkeyk.sos.domain.user;
import com.monkeyk.sos.domain.AbstractDomain; 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.io.Serial;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List; 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_ * table: user_
@ -228,4 +231,23 @@ public class User extends AbstractDomain {
return this; return this;
} }
/**
*
*
* @return GrantedAuthority set
* @since 3.0.0
*/
public Set<GrantedAuthority> generateAuthorities() {
Set<GrantedAuthority> authorities = new HashSet<>();
//Default, everyone include
authorities.add(DEFAULT_USER_ROLE);
final List<Privilege> privileges = this.privileges();
for (Privilege privilege : privileges) {
authorities.add(new SimpleGrantedAuthority(ROLE_PREFIX + privilege.name()));
}
return authorities;
}
} }

View File

@ -55,7 +55,7 @@ public class UserServiceImpl implements UserService {
// return loadOauthUserJsonDto((OAuth2Authentication) authentication); // return loadOauthUserJsonDto((OAuth2Authentication) authentication);
// } else { // } else {
final SOSUserDetails userDetails = (SOSUserDetails) principal; final SOSUserDetails userDetails = (SOSUserDetails) principal;
return new UserJsonDto(userRepository.findByGuid(userDetails.user().guid())); return new UserJsonDto(userRepository.findByGuid(userDetails.getUserGuid()));
// } // }
} }