Seam - IdentityManager.isUserEnabled()的问题

时间:2011-08-31 16:00:24

标签: java security jpa seam identity-management

我有一个JBoss Seam应用程序,它利用Seam的IdentityManagerJpaIdentityStore组件来处理用户帐户创建和身份验证。我的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(),则仍会显示错误。

1 个答案:

答案 0 :(得分:0)

原来是一个与延迟抓取相关的问题。我有一个UserProfile对象,上面有userAccount属性。这种关系是Lazy-fetched。一旦我将其更改为Eager抓取,我收到了来自isUserEnabled()的相应响应。