Java Seam 3-安全模块-使用JPAIdendityStore进行身份管理
我正在使用带有身份管理的seam 3安全模块和JpaIdentityStore、postgres和Jboss 6在我的数据库上创建用户,但它不起作用。我遵循提供的示例(http://docs.jboss.org/seam/3/security/latest/reference/en-US/html/security-identitymanagement.html) 我刚刚编写了以下简单代码来创建用户:Java Seam 3-安全模块-使用JPAIdendityStore进行身份管理,java,identity,seam3,Java,Identity,Seam3,我正在使用带有身份管理的seam 3安全模块和JpaIdentityStore、postgres和Jboss 6在我的数据库上创建用户,但它不起作用。我遵循提供的示例(http://docs.jboss.org/seam/3/security/latest/reference/en-US/html/security-identitymanagement.html) 我刚刚编写了以下简单代码来创建用户: @Model public class MemberRegistration {
@Model
public class MemberRegistration {
@Inject
Identity identity;
@Inject
IdentitySession identitySession;
public void register() throws Exception {
PersistenceManager pm = identitySession.getPersistenceManager();
pm.createUser("testuser");
}
}
使用此JSF片段:
<h:commandButton value="#{bundle.defaultHeader_createAccount}" action="#{memberRegistration.register}"/>
在调试seam的源文件时,我注意到在下面的方法中,在JpaIdentityStore类上,EntityManager em为null,这就是引发第一个异常的原因
protected Object lookupIdentityType(String identityType, EntityManager em)
{
try
{
Property<Object> typeNameProp = modelProperties.get(PROPERTY_IDENTITY_TYPE_NAME);
// If there is no identity type table, just return the name
if (typeNameProp == null) return identityType;
Object val = em.createQuery(
"select t from " + typeNameProp.getDeclaringClass().getName() +
" t where t." + typeNameProp.getName() +
" = :identityType")
.setParameter("identityType", identityType)
.getSingleResult();
return val;
}
catch (NoResultException ex)
{
return null;
}
}
protectedobjectlookupidentitytype(字符串identityType,EntityManager em)
{
尝试
{
Property typeNameProp=modelProperties.get(Property\u IDENTITY\u TYPE\u NAME);
//如果没有标识类型表,只需返回名称即可
if(typeNameProp==null)返回identityType;
对象val=em.createQuery(
“从”+typeNameProp.getDeclaringClass().getName()+
“t其中t.”+typeNameProp.getName()+
“=:identityType”)
.setParameter(“identityType”,identityType)
.getSingleResult();
返回val;
}
捕获(noresultex异常)
{
返回null;
}
}
我的配置文件:
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="bommenuDatabase" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/bommenuDatasource</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
org.hibernate.ejb.HibernatePersistence
java:/bommenuDatasource
seam-beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:ee"
xmlns:security="urn:java:org.jboss.seam.security"
xmlns:plidm="urn:java:org.jboss.seam.security.management.picketlink"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
<interceptors>
<class>org.jboss.seam.transaction.TransactionInterceptor</class>
</interceptors>
<plidm:JpaIdentityStoreConfiguration>
<s:replaces/>
<plidm:identityClass>com.manzana.bommenu.domain.IdentityObject</plidm:identityClass>
<plidm:credentialClass>com.manzana.bommenu.domain.IdentityObjectCredential</plidm:credentialClass>
<plidm:relationshipClass>com.manzana.bommenu.domain.IdentityObjectRelationship</plidm:relationshipClass>
<plidm:roleTypeClass>com.manzana.bommenu.domain.IdentityRoleName</plidm:roleTypeClass>
<plidm:attributeClass>com.manzana.bommenu.domain.IdentityObjectAttribute</plidm:attributeClass>
</plidm:JpaIdentityStoreConfiguration>
</beans>
org.jboss.seam.transaction.TransactionInterceptor
com.manzana.bommenu.domain.IdentityObject
com.manzana.bommenu.domain.IdentityObjectCredential
com.manzana.bommenu.domain.IdentityObjectRelationship
com.manzana.bommenu.domain.IdentityRoleName
com.manzana.bommenu.domain.IdentityObjectAttribute
我赞成任何建议,因为我真的不知道该做什么
自3.1.0.Beta3以来,Seam持久性的配置更加容易。请查看文档和其他示例以获得正确的注释(注释路线现在比Seam配置更受欢迎)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:ee"
xmlns:security="urn:java:org.jboss.seam.security"
xmlns:plidm="urn:java:org.jboss.seam.security.management.picketlink"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
<interceptors>
<class>org.jboss.seam.transaction.TransactionInterceptor</class>
</interceptors>
<plidm:JpaIdentityStoreConfiguration>
<s:replaces/>
<plidm:identityClass>com.manzana.bommenu.domain.IdentityObject</plidm:identityClass>
<plidm:credentialClass>com.manzana.bommenu.domain.IdentityObjectCredential</plidm:credentialClass>
<plidm:relationshipClass>com.manzana.bommenu.domain.IdentityObjectRelationship</plidm:relationshipClass>
<plidm:roleTypeClass>com.manzana.bommenu.domain.IdentityRoleName</plidm:roleTypeClass>
<plidm:attributeClass>com.manzana.bommenu.domain.IdentityObjectAttribute</plidm:attributeClass>
</plidm:JpaIdentityStoreConfiguration>
</beans>