1

我有一个 JBoss Seam 应用程序,它利用 SeamIdentityManagerJpaIdentityStore组件来处理用户帐户创建和身份验证。我的components.xml文件设置正确,我可以IdentityManager毫无问题地用于创建帐户。

我创建了一个页面来允许我执行基本的帐户维护,例如启用/禁用帐户。但是,每当我调用isUserEnabled(String username)on 方法时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(),它仍然显示为 false。

4

1 回答 1

0

原来是与延迟获取有关的问题。我有一个带有 userAccount 属性的 UserProfile 对象。该关系是延迟获取的。将其更改为 Eager fetching 后,我从 isUserEnabled() 收到了适当的响应。

于 2011-09-03T01:39:28.507 回答