Bonsoir, j'ai passé la fin de la semaine sur le problème, mais les tutos que j'ai consultés ne sont pas à jour ou ne m'aident pas.
J'essaie donc d'implémenter spring security en utilisant des modèles jpa et l'idée serait de pouvoir afficher les tables des roles et utilisateurs via richfaces au final, mon soucis vient en partie de jpa, spring défini un modèle pour jdbc, et utilise un "username" de l'objet User en tant que clé étrangère, ce qui ne va pas du tout avec mon modèle qui utilise des "id".
Et voici donc ce que j'ai bricolé mais qui ne fonctionne évidemment pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 @Entity @Table(name = "authorities", uniqueConstraints = @UniqueConstraint(name = "unique_auth_username", columnNames = {"username", "authority"})) @org.hibernate.annotations.Entity(dynamicUpdate = true, optimisticLock = OptimisticLockType.VERSION) public class Authority extends GenericEntity { public static final String ROLE_USER = "ROLE_USER"; public static final String ROLE_ADMIN = "ROLE_ADMINISTRATOR"; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AUTH_SEQ_GEN") @SequenceGenerator(name = "AUTH_SEQ_GEN", sequenceName = "AUTH_SEQ", allocationSize = 1) @Column(name = "authority_id", nullable = false) private Integer id; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "username") private String username; @Column(name = "authority", length = 50, nullable = false) private String authority;J'auraias voulu savoir si vous aviez déjà un exemple plus complet que les tutos, la plupart ne fonctionnent pas avec une bdd et ceux qui le font n'utilisent pas jpa(via Hibernate)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 @Entity @Table(name = "users") @org.hibernate.annotations.Entity(dynamicUpdate = true, optimisticLock = OptimisticLockType.VERSION) public class User extends GenericEntity implements Serializable, UserDetails { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ_GEN") @SequenceGenerator(name = "USERS_SEQ_GEN", sequenceName = "USERS_SEQ", allocationSize = 1) @Column(name = "user_id", nullable = false) private Integer id; @Column(nullable = false, length = 50) private String firstName; @Column(nullable = false, length = 50) private String name; @Column(nullable = false, length = 50, unique = true) private String username; @Column(nullable = false, length = 50) private String password; @OneToMany(fetch = FetchType.EAGER, mappedBy = "username", cascade = {CascadeType.REMOVE}, orphanRemoval = true) private Collection<Authority> authorities; @Column(nullable = false, updatable = false) @Temporal(value = javax.persistence.TemporalType.TIMESTAMP) private Date registrationDate; @Temporal(value = javax.persistence.TemporalType.TIMESTAMP) private Date expirationDate; @Column(nullable = false) private Boolean enabled; @Column(nullable = false) private Boolean accountLocked; @Column(nullable = false) private Boolean credentialsExpired; @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = {CascadeType.REMOVE}, orphanRemoval = true) private Set<Contact> contacts = new HashSet<Contact>(0); @OneToMany(fetch = FetchType.LAZY, mappedBy = "from", cascade = {CascadeType.REMOVE}, orphanRemoval = true) private List<Message> messagesIn = new ArrayList<Message>(0); @OneToMany(fetch = FetchType.LAZY, mappedBy = "to", cascade = {CascadeType.REMOVE}, orphanRemoval = true) private List<Message> messagesOut = new ArrayList<Message>(0);
J'ai pu voir qu'on pouvait hériter de UserDetailsService, de UserDetails ainsi que de GrantedAuthority, j'ai essayé, et je me retrouve coincé d'une part avec mon problème de clé primaire, mais aussi parce que mon implémentation de GrantedAuthority n'est pas accepté comme entité (d'où son absence après modification de mon code).
J'accepte tout coup de pouce![]()
Partager