Bonjour tout le monde
je travaille actuellement sur une application avec seam et je bloque completement sur la partie sécurité, mon problème c'est que je dois associer des droits d'accès ( login et mot de passe) à chaque membre ( ce qui diffère un membre d'un utilisateur sont les attributs et les tables associées a chacun d'entre eux) et lui donner un role 'user' par defaut
voici les bean entités
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 package org.domain.test.entity; import java.io.Serializable; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.hibernate.validator.NotNull; import org.jboss.seam.annotations.security.management.UserEnabled; import org.jboss.seam.annotations.security.management.UserPassword; import org.jboss.seam.annotations.security.management.UserPrincipal; import org.jboss.seam.annotations.security.management.UserRoles; @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"), name = "user_account") public class UserAccount implements Serializable { private static final long serialVersionUID = 6368734442192368866L; private Long id; private String username; private String passwordHash; private boolean enabled; private Set<UserRole> roles; private Member member; @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @NotNull @UserPrincipal public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @UserPassword @Column(name = "password_hash") public String getPasswordHash() { return passwordHash; } public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; } @UserEnabled public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } @UserRoles @ManyToMany @JoinTable(name = "user_account_role", joinColumns = @JoinColumn(name = "account_id"), inverseJoinColumns = @JoinColumn(name = "member_of_role")) public Set<UserRole> getRoles() { return roles; } public void setRoles(Set<UserRole> roles) { this.roles = roles; } @OneToOne @JoinColumn(name = "MEMBER_ID") public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } }et voici le bean session 'MemberHome' généré par seam
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 package org.domain.test.entity; // Generated 1 juin 2009 11:44:41 by Hibernate Tools 3.2.4.CR1 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; /** * Member generated by hbm2java */ @Entity @Table(name = "member", catalog = "hp", uniqueConstraints = @UniqueConstraint(columnNames = "memberName")) public class Member implements java.io.Serializable { private Integer memberId; private String memberName; private String firstName; private String lastName; public Member() { } public Member(String memberName, String firstName, String lastName) { this.memberName = memberName; this.firstName = firstName; this.lastName = lastName; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "memberId", unique = true, nullable = false) public Integer getMemberId() { return this.memberId; } public void setMemberId(Integer memberId) { this.memberId = memberId; } @Column(name = "memberName", unique = true, nullable = false, length = 40) @NotNull @Length(max = 40) public String getMemberName() { return this.memberName; } public void setMemberName(String memberName) { this.memberName = memberName; } @Column(name = "firstName", nullable = false, length = 40) @NotNull @Length(max = 40) public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } @Column(name = "lastName", nullable = false, length = 40) @NotNull @Length(max = 40) public String getLastName() { return this.lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
dans l exemple de seamspace ils ont contourné ce problème avec l instruction merge
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 package org.domain.test.session; import org.domain.test.entity.*; import org.jboss.seam.annotations.Name; import org.jboss.seam.framework.EntityHome; import org.jboss.seam.security.Identity; import org.jboss.seam.security.RunAsOperation; import org.jboss.seam.security.management.IdentityManager; import org.jboss.seam.annotations.In; import javax.persistence.EntityManager; import org.jboss.seam.faces.FacesMessages; @Name("memberHome") public class MemberHome extends EntityHome<Member> { public void setMemberMemberId(Integer id) { setId(id); } public Integer getMemberMemberId() { return (Integer) getId(); } @Override protected Member createInstance() { Member member = new Member(); return member; } public void wire() { getInstance(); } public boolean isWired() { return true; } public Member getDefinedInstance() { return isIdDefined() ? getInstance() : null; } }
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 verified = (confirm != null && confirm.equals(password)); if (!verified) { FacesMessages.instance().addToControl("confirmPassword", "Passwords do not match"); } new RunAsOperation() { public void execute() { identityManager.createUser(username, password); identityManager.grantRole(username, "user"); } }.addRole("admin") .run(); newAccount.setMember(member); newAccount = entityManager.merge(newAccount); // Login the user identity.getCredentials().setUsername(username); identity.getCredentials().setPassword(password); identity.login();
j'ai essayé de faire la meme chose mais je n arrive pas malheureusement, quelqu un peut m aider s'il vous plait
Merci d 'avance![]()
Partager