1

我为具有 Errai 安全性的用户提供了这个 CustomAuthenticator:

public CustomAuthenticator extends BaseAuthenticator {
    @Override
    public void authenticate() {
        String userId = loginCredentials.getUserId();
        String password = loginCredentials.getPassword();
        User user = userDAO.fetchUserByName(userId);
        if (!BCrypt.checkpw(password, user.getPasswordHash())) {
            setStatus(AuthenticationStatus.FAILURE);
        } else {
            // Add to IDM
            IdentityQuery<UserImpl> query
                    = partitionManager.createIdentityManager().createIdentityQuery(UserImpl.class);
            query.setParameter(UserImpl.LOGIN_NAME, user.getUsername());
            List<UserImpl> result = query.getResultList();
            org.picketlink.idm.model.basic.Role trial = new org.picketlink.idm.model.basic.Role("TRIAL");
            if (result.isEmpty()){
                UserImpl account = new UserImpl(user);
                partitionManager.createIdentityManager().add(account);
                partitionManager.createIdentityManager().updateCredential(account, new Password(password));
                partitionManager.createIdentityManager().add(trial);
                BasicModel.grantRole(partitionManager.createRelationshipManager(), account, trial);
                IdentityQuery<UserImpl> q
                        = partitionManager.createIdentityManager().createIdentityQuery(UserImpl.class);
                q.setParameter(UserImpl.LOGIN_NAME, user.getUsername());
                UserImpl u = q.getResultList().iterator().next();
                setStatus(AuthenticationStatus.SUCCESS);
                setAccount(u);
            } else {
                setStatus(AuthenticationStatus.SUCCESS);
                setAccount(result.iterator().next());

            }
            userEvent.fire(user);
        }
}

即使我检查要设置的 seAccount 帐户是否正常,我也不确定角色是否保留在 Picketlink 端的列表中;因为呼叫的响应:

Caller<AuthenticationService> authServiceCaller;

Errai 安全用户返回虽然不为空,但名称是“ANONYMOUS”,角色是“NOBODY”我不确定这里发生了什么。

更新:

login(username, password)方法返回正确的用户和角色,但getUser()没有。这就是问题所在。

4

0 回答 0