Я пытаюсь получить атрибуты от пользователей и полномочий, предоставленные Spring Security.Как расширить класс пользователя из Spring Security и использовать JPA для создания таблицы
Я знаю, что вы можете переопределить UserDetailsService, чтобы создать свой собственный пользовательский класс, но в этом случае я хочу получить полный класс по умолчанию и, кроме того, еще несколько атрибутов.
Позвольте мне объяснить, с кодом:
public class User implements UserDetails, CredentialsContainer {
private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
private String password;
private final String username;
private final Set<GrantedAuthority> authorities;
private final boolean accountNonExpired;
private final boolean accountNonLocked;
private final boolean credentialsNonExpired;
private final boolean enabled;
}
Это класс пользователя, которые обеспечивают Spring Security и то, что я хочу, это расширяет мой собственный класс, используя эти атрибуты. Я попытался это, но база данных не получает атрибуты пользователя:
@Entity
@Table(name="MyUser")
public class ExtendedUser extends User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String email;
private static final long serialVersionUID = -2147191899215904479L;
public ExtendedUser(String username, String password, boolean enabled, boolean accountNonExpired,
boolean credentialsNonExpired, boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
// TODO Auto-generated constructor stub
}
.
.
.
Мой вопрос, нужно ли мне создать свой собственный класс User, чтобы наследовать эти атрибуты и использовать аннотации JPA, чтобы спящий режим "понимать это?
Я думаю, что я что-то пропустил, но не могу понять.
так что «пользователь» аннотируется как сущность? А если нет, то вы следуете JPA-документам и сопоставляете их с файлом _orm.xml_. –
Нет, нет. Я не хочу смешивать XML Config с Java Config, который я использую в настоящее время, и потому, что я не могу добавить эту аннотацию к классу User, так как он находится внутри библиотеки. Я думаю, что буду использовать то, что описано Наросом. Благодарим вас за ответ. –
Вам не нужно расширять класс User из Spring Security. Более чистое и простое решение - позволить вашему классу ExtendedUser реализовать интерфейс UserDetails. –