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;
	   }
 
 
}
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;
	}
 
}
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
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;
	}
 
 
 
 
 
 
 
 
}
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
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