我有一个JBoss Seam应用程序,它利用Seam的IdentityManager
和JpaIdentityStore
组件来处理用户帐户创建和身份验证。我的components.xml
文件设置正确,我可以使用IdentityManager
创建没有问题的帐户。
我创建了一个页面,允许我执行基本帐户维护,例如启用/禁用帐户。但是,每当我在isUserEnabled(String username)
上调用IdentityManager
方法时,它总是返回false。 JpaIdentityStore
中的相应方法也返回false。即使我可以看到数据库中已启用帐户,两者都会发生。我的用户帐户类注释如下:
@Name("user")
@Entity(name = "UserAccount")
@Table(name = "tbl_user_acct", uniqueConstraints = { @UniqueConstraint(columnNames = "username") })
public class UserAccountBean extends BaseDomainEntity implements
VersionedDomainEntity {
private static final long serialVersionUID = -3573332411594504888L;
@UserEnabled
private boolean enabled;
...
}
我对IdentityManager
类的任何其他方面没有任何问题(更改密码,创建/删除帐户等)。我遇到的唯一错误是当我尝试确定是否用户是否启用。我没有收到任何异常或错误消息,我只是得到了错误的结果。
还有其他人遇到过这个吗?知道如何最好地开始解决这个问题吗?
编辑:其他一些信息......
我注意到当我调用disableUser(String username)
时,我确实看到数据库在ENABLED列中反映了这一点。此外,当我拨打enableUser(String username)
时,我会立即看到帐户已启用。但是,如果我导航到另一个页面然后返回并致电isUserEnabled()
,则仍会显示错误。
答案 0 :(得分:0)
原来是一个与延迟抓取相关的问题。我有一个UserProfile对象,上面有userAccount属性。这种关系是Lazy-fetched。一旦我将其更改为Eager抓取,我收到了来自isUserEnabled()的相应响应。