IdentityManager not found in components.xml
poschd Nov 4, 2010 7:59 AMHi everyone,
I am struggling to set up authentication using the Identity Management API. It seems to be a straight forward task, but I have failed. When I try to login, the following excpetion occurs:
WARN [org.jboss.seam.security.jaas.SeamLoginModule] (http-localhost%2F127.0.0.1-8080-1) Error invoking login method
I haven't management to get more information... (Any suggestions?) Anyway, what catched my eye were two warnings in components.xml from Eclipse, stating that neither IdentityManager nor JpaIdentityStore could be resolved:
- "org.jboss.seam.security.IdentityManager" cannot be resolved to a type
- "org.jboss.seam.security.JpaIdentityStore" cannot be resolved to a type
I think there's something wrong with capitalization, isn't it? Shouldn't it be "identityManager" and "jpaIdentityManager", respectively? Can this be a bug? Or is there an error elsewhere in my code?
I'd be happy for any suggestions. Thanks a lot!
Best Regards,
Daniel
By the way, I'm using Seam 2.2.CR2 and JBoss 5.1.
components.xml:
<!-- .... -->
<security:identity-manager identity-store="#{jpaIdentityStore}" /> <!-- "org.jboss.seam.security.IdentityManager" cannot be resolved to a type -->
<security:jpa-identity-store user-class="my.simple.entity.User" role-class="my.simple.entity.Role" /> <!-- "org.jboss.seam.security.JpaIdentityStore" cannot be resolved to a type -->
<!-- .... -->login.xhtml:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml">
<ui:define name="body">
<h:form id="loginForm">
<rich:panel>
<f:facet name="header">Login</f:facet>
<p>Please login here</p>
<div class="dialog"><h:panelGrid columns="2" rowClasses="prop"
columnClasses="name,value">
<h:outputLabel for="username">Username</h:outputLabel>
<h:inputText id="username" value="#{credentials.username}" />
<h:outputLabel for="password">Password</h:outputLabel>
<h:inputSecret id="password" value="#{credentials.password}" />
<h:outputLabel for="rememberMe">Remember me</h:outputLabel>
<h:selectBooleanCheckbox id="rememberMe"
value="#{identity.rememberMe}" />
</h:panelGrid></div>
</rich:panel>
<div class="actionButtons">
<h:commandButton id="submit" value="Login" action="#{identity.login}" />
</div>
</h:form>
</ui:define>
</ui:composition>User.java:
@Entity
@Table(name = "user", schema = "security")
public class User implements java.io.Serializable {
private static final long serialVersionUID = -6955525812822596985L;
private int id;
private String username;
private String password;
private String firstname;
private String lastname;
private Boolean enabled;
private Set<Role> roles = new HashSet<Role>(0);
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public User(Integer id, String username, String password, String firstname,
String lastname, Boolean enabled, Set<Role> roles) {
this.id = id;
this.username = username;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
this.enabled = enabled;
this.roles = roles;
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id", unique = true, nullable = false)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@UserPrincipal
@Column(name = "username", nullable = false, length = 32)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
@UserPassword(hash = "md5")
@Column(name = "password", nullable = false)
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@UserFirstName
@Column(name = "firstname", length = 32)
public String getFirstname() {
return this.firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@UserLastName
@Column(name = "lastname")
public String getLastname() {
return this.lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
@UserEnabled
@Column(name = "enabled")
public Boolean getEnabled() {
return this.enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@UserRoles
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_role", schema = "security", joinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) })
public Set<Role> getRoles() {
return this.roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}Role.java:
@Entity
@Table(name = "role", schema = "security")
public class Role implements java.io.Serializable {
private static final long serialVersionUID = -8291119166266410989L;
private int id;
private String rolename;
private Set<User> users = new HashSet<User>(0);
public Role() {
}
public Role(int id, String rolename) {
this.id = id;
this.rolename = rolename;
}
public Role(int id, String rolename, Set<User> users) {
this.id = id;
this.rolename = rolename;
this.users = users;
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id", unique = true, nullable = false)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@RoleName
@Column(name = "rolename", nullable = false, length = 32)
public String getRolename() {
return this.rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_role", schema = "security", joinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) })
public Set<User> getUsers() {
return this.users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}