2017-02-01 3 views
0

Я пытаюсь получить атрибуты от пользователей и полномочий, предоставленные 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, чтобы спящий режим "понимать это?

Я думаю, что я что-то пропустил, но не могу понять.

+0

так что «пользователь» аннотируется как сущность? А если нет, то вы следуете JPA-документам и сопоставляете их с файлом _orm.xml_. –

+0

Нет, нет. Я не хочу смешивать XML Config с Java Config, который я использую в настоящее время, и потому, что я не могу добавить эту аннотацию к классу User, так как он находится внутри библиотеки. Я думаю, что буду использовать то, что описано Наросом. Благодарим вас за ответ. –

+0

Вам не нужно расширять класс User из Spring Security. Более чистое и простое решение - позволить вашему классу ExtendedUser реализовать интерфейс UserDetails. –

ответ

3

В JPA, сопоставьте его в orm.xml или в спящем режиме, вы могли бы использовать устаревшую HBM XML.

Я бы порекомендовал не расширять сопоставление сущности из класса Spring Security User, поскольку он делает ваши сопоставления в значительной степени связанными с их реализацией, и у вас нет контроля над ними и может сделать обновление более сложным.

Вместо этого я бы рекомендовал вам создать свой собственный объект User и сохранить информацию в модели, которая соответствует потребностям вашего приложения. Затем в качестве части реализации UserDetailsService вы берете объект User и связанные с ним объекты и создаете расширенный объект UserDetails, который вы передаете Spring Security.

+0

Да, я знаю, что вы можете переопределить Службу, чтобы сопоставить свой собственный пользовательский класс для работы с Spring Security (вместо UserName, вы можете сопоставить его с электронной почтой, например). Но то, что вы сказали, имеет смысл, это то, что вы хотите контролировать. Как я и думал, я пропустил некоторые концепции, Весна делает слишком много вещей для вас, но ... вот в чем идея! Благодарим вас за ответ. –

1

Я думаю, что вы можете переопределить Getter/Setter, чтобы добавить аннотации JPA.

+0

Я проверю его и посмотрю, работает ли он, спасибо. –