0
이 이상한 시나리오가 있습니다.이 PlatformUser
클래스는 email
을 반환하는 Principal
클래스를 구현합니다. 이는 승인에 필요합니다. 공용 속성 name
및 email
을 기반으로 PlatformUser
을 직렬화 및 비 직렬화 할 수 있기를 바랍니다. 이 클래스가 작동하도록 내 클래스에 주석을 달려면 어떻게해야합니까? 해결 방법으로 name
을 fullName
으로 변경해야하지만 이는 내 질문의 목적에 어긋납니다. 감사!public 속성이 json serialization에서 공용 getter로 표시되어 있지 않습니다.
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import javax.persistence.*;
import javax.security.auth.Subject;
import java.security.Principal;
import java.util.*;
@Entity
public class PlatformUser implements Principal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
public String name;
public String email;
public String role = getUserRole().getRole().toString().toLowerCase();
@Transient
private List<GrantedAuthority> authorities;
public PlatformUser(){}
public PlatformUser(String email, List<GrantedAuthority> authorities) {
this.email = email;
this.authorities = authorities;
}
@Override
public String getName() {
return email;
}
@Override
public boolean implies(Subject subject) {
return false;
}
public static PlatformUser create(String email, List<GrantedAuthority> authorities) {
if (StringUtils.isBlank(email)) throw new IllegalArgumentException("Email is blank: " + email);
return new PlatformUser(email, authorities);
}
public Set<GrantedAuthority> getAuthorities() {
UserRole role = this.getUserRole();
Set<GrantedAuthority> authorities = new HashSet<>();
authorities.add(new SimpleGrantedAuthority(role.getRole().authority()));
return authorities;
}
public void setAuthorities(List<GrantedAuthority> authorities) {
this.authorities = authorities;
}
public UserRole getUserRole() {
return new UserRole(id, Role.ADMIN);
}
}