2013-07-22 2 views
1

В настоящее время я использую библиотеки безопасности для весны, и я задал себе следующий вопрос: как мне объединить мою модель базы данных с таблицами весенней безопасности?весной безопасности datamodel

Как вы знаете, Spring-security нуждается в двух таблицах (пользователях и полномочиях) для определения менеджера аутентификации в базе данных. С моей POV есть две возможностей, где я храню свою дополнительную пользовательскую информацию (например, адрес электронной почты, ФАМИЛИЯ, последний вошедшего, ....)

  1. Я мог бы иметь простую пользовательскую таблицу для проверки подлинности цели и другое для остальных (связанное по имени пользователя)

  2. Я расширяю пользовательскую таблицу весенней безопасности с моими необходимыми атрибутами.

Каков наилучший дизайн с вашей точки зрения? Каковы ваши впечатления?

Lomu

+0

Я создал производные классы для представления различных типов пользователей. Например, «ProfiledUser расширяет пользователя». – MaVVamaldo

+0

Вы создали «User» pojo для этого в спящем режиме и в профиле ProfiledUser? –

+0

Мне нужно больше места, поэтому я отправил свой ответ. – MaVVamaldo

ответ

2

Я создал POJO User, который представляет собой объект пользователя, как задумано библиотеки Spring Security, а во-вторых, я создал POJO ProfiledUser представлять особый тип пользователя моего приложения. Он называется ProfiledUser, потому что мне нужен пользователь, связанный с профилем. Конечно, подобный подход может быть применен для каждого пользователя, которого вы должны представлять. В принципе, если вам нужно более одного типа пользователей, вы можете сделать свои классы для расширения пользовательского POJO. Ниже вы найдете класс с аннотациями JPA.

@Entity 
@Table(name="USERS") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class User implements UserDetails { 

    private static final long serialVersionUID = 1L; 
    private long id; 
    private String username; 
    private String password; 
    private boolean enabled = true; 
    Set<Authority> authorities = new HashSet<Authority>(); 
    //...getters & setters 
    } 

@Entity 
@Table(name="PROFILED_USERS") 
public class ProfiledUser extends User{ 

    private static final long serialVersionUID = 1L; 
    //some custom attributes 
    private PersonalData personalData; 
    private ContactData contactData; 
    private AddressData addressData; 
    //...getters & setters 

    } 

Если вам нужно представлять только один тип пользователя, я думаю, он должен работать, чтобы добавить атрибуты к User класса. Тем не менее, я предпочитаю отделить абстрактную концепцию пользователя, определенную инфраструктурой Spring Security, от моей бизнес-логики. Поэтому я бы рекомендовал реализовать свой собственный SomethingUser и расширить класс User.

0

Человек - это человек, и у вас должен быть класс/стол, представляющий человека и кинжал ;.

Пользователь является пользователем и отличается от человека (отсюда два разных слова), и вы должны иметь класс/таблицу, представляющую пользователя.

Может существовать без пользователя? Да

Может быть пользователь без личен? Нет, имя пользователя принадлежит кому-то.

@Entity 
abstract class Party { 

    @Id 
    Long id; 

    String name; 

    @OneToMany 
    List<User> usernames = new ArrayList<>(); 
} 

@Entity 
class Individual extends Party { 
    DateTime dateOfBirth; 
} 

@Entity 
class User { 

    @ManyToOne 
    Party party; 

    String username; 

    String password; //you better use BCrypt/Blowfish hashing! 

    Boolean enabled = true; 
} 

Вы можете вместо этого использовать связь @OneToOne, если хотите только одно имя пользователя для каждой стороны.

& dagger; На самом деле у вас должен быть более абстрактный класс/таблица, представляющая юридическую сторону.